首页 > 解决方案 > 输入:原始值或容器

问题描述

我想创建一个参数化类型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]]):
    ...

有捷径还是我需要自己写一门课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. 我有什么不同的做法?

标签: pythonpython-3.xpython-typing

解决方案


你很接近 - 你需要做RawOrVariable = Union[T, Variable[T]]而不是RawOrVariable[T] = Union[T, Variable[T]].

请注意,后者不是有效的 Python 代码——该RawOrVariable变量不是在运行时定义的。

有关更多详细信息,请参阅有关泛型类型别名的 mypy 文档PEP 484 还简要地给出了一个示例,说明泛型类型别名在此处的第二个示例中是什么样子的。


推荐阅读