类型:原始值或容器
Typing: Raw value or Container
我想创建一个参数化类型 RawOrVariable[T] = Union[T, Variable[T]]
以便
def foo(a: RawOrVariable[str]):
...
def bar(b: RawOrVariable[int]):
...
等同于
def foo(a: Union[str, Variable[str]]):
...
def bar(b: Union[int, Variable[int]]):
...
有没有捷径或者我需要自己写一个class RawOrVariable
?例如。像这样:
@type_check_only
class RawOrVariable:
def __class_getitem__(cls, t):
return Union[t, Variable[t]]
我需要注意什么?
更新
当我使用上面的 RawOrVarialbe
时,mypy 抱怨:"RawOrVariable" expects no type arguments, but 1 given
。我需要做哪些不同的事情?
你很接近了——你需要做 RawOrVariable = Union[T, Variable[T]]
而不是 RawOrVariable[T] = Union[T, Variable[T]]
。
请注意,后者是无效的 Python 代码 -- RawOrVariable
变量未在运行时定义。
有关详细信息,请参阅 mypy docs on generic type aliases. PEP 484 also briefly gives an example of what a generic type alias looks like in the second example here。
我想创建一个参数化类型 RawOrVariable[T] = Union[T, Variable[T]]
以便
def foo(a: RawOrVariable[str]):
...
def bar(b: RawOrVariable[int]):
...
等同于
def foo(a: Union[str, Variable[str]]):
...
def bar(b: Union[int, Variable[int]]):
...
有没有捷径或者我需要自己写一个class RawOrVariable
?例如。像这样:
@type_check_only
class RawOrVariable:
def __class_getitem__(cls, t):
return Union[t, Variable[t]]
我需要注意什么?
更新
当我使用上面的 RawOrVarialbe
时,mypy 抱怨:"RawOrVariable" expects no type arguments, but 1 given
。我需要做哪些不同的事情?
你很接近了——你需要做 RawOrVariable = Union[T, Variable[T]]
而不是 RawOrVariable[T] = Union[T, Variable[T]]
。
请注意,后者是无效的 Python 代码 -- RawOrVariable
变量未在运行时定义。
有关详细信息,请参阅 mypy docs on generic type aliases. PEP 484 also briefly gives an example of what a generic type alias looks like in the second example here。