我想定义如下的通用类型
MyType(OtherType) := Union[SomeClass, OtherType]
因此不必键入以下内容来注释x:
x: Union[SomeClass, int]
我只需要写
x: MyType[int] # or MyType(int) for what it's worth
我是否必须继承Type
的子类?如果是这样,该怎么做呢?
答案 0 :(得分:2)
如果我正确理解,您所需要的只是像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]