gpt4 book ai didi

python - python 类型注释的参数化联合

转载 作者:行者123 更新时间:2023-12-01 00:04:53 25 4
gpt4 key购买 nike

我想定义一个如下所示的泛型类型

MyType(OtherType) := Union[SomeClass, OtherType]

这样就不用输入以下内容来注释 x:

x: Union[SomeClass, int]

我只需要写

x: MyType[int]   # or MyType(int) for what it's worth

我必须子类化Type吗?如果是这样,如何去做呢?

最佳答案

如果我理解正确的话,你所需要的只是 TypeVar instance喜欢

from typing import TypeVar, Union


class SomeClass:
...


OtherType = TypeVar('OtherType')
MyType = Union[SomeClass, OtherType]


def foo(x: MyType[int]) -> int:
return x ** 2

将这样的代码放置在 test.py 模块中

$ mypy test.py

给我

test.py:13: error: Unsupported operand types for ** ("SomeClass" and "int")
test.py:13: note: Left operand is of type "Union[SomeClass, int]"

并在 foo 中进行修复

def foo(x: MyType[int]) -> int:
if isinstance(x, SomeClass):
return 0
return x ** 2

没有任何问题。

注释

如果我们真的需要这种类型的别名,我会这样调用它

SomeClassOr = Union[SomeClass, OtherType]

自从

SomeClassOr[int]

对我来说似乎比

更具可读性
MyClass[int]

引用

关于python - python 类型注释的参数化联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60038231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com