python类型注释的参数化联合
我想定义一个泛型类型,如下所示python类型注释的参数化联合,python,python-3.x,mypy,python-typing,Python,Python 3.x,Mypy,Python Typing,我想定义一个泛型类型,如下所示 MyType(OtherType) := Union[SomeClass, OtherType] 因此,不要键入以下内容来注释x: x: Union[SomeClass, int] 我只要写信就行了 x: MyType[int] # or MyType(int) for what it's worth 我是否必须子类化类型?如果是这样的话,你怎么做呢?如果我理解正确,你需要的只是一个 通过键入import-TypeVar,Union 类SomeClass
MyType(OtherType) := Union[SomeClass, OtherType]
因此,不要键入以下内容来注释x:
x: Union[SomeClass, int]
我只要写信就行了
x: MyType[int] # or MyType(int) for what it's worth
我是否必须子类化
类型
?如果是这样的话,你怎么做呢?如果我理解正确,你需要的只是一个
通过键入import-TypeVar,Union
类SomeClass:
...
OtherType=TypeVar('OtherType')
MyType=联合[SomeClass,OtherType]
def foo(x:MyType[int])->int:
返回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:
如果isinstance(x,SomeClass):
返回0
返回x**2
没有问题
笔记
如果我们真的需要这种别名,我会把它叫做
SomeClassOr=Union[SomeClass,OtherType]
自
SomeClassOr[int]
对我来说似乎比
MyClass[int]
参考文献
SomeClass
是一个固定的现有类,OtherType
是一个类型变量?没错,就是这样,如果您认为它可以使问题更清楚,请随意编辑!