【问题标题】:Typing: Raw value or Container输入:原始值或容器
【发布时间】:2020-02-16 15:54:06
【问题描述】:

我想创建一个参数化类型 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。我有什么不同的做法?

【问题讨论】:

标签: python python-3.x python-typing


【解决方案1】:

你已经接近了——你需要做RawOrVariable = Union[T, Variable[T]]而不是RawOrVariable[T] = Union[T, Variable[T]]

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

有关详细信息,请参阅mypy docs on generic type aliases。 PEP 484 还简要给出了第二个示例 here 中泛型类型别名的示例。

【讨论】:

  • 感谢您的回答!我刚刚独立发现我的问题是一个已经存在的问题的重复(你也回答了)......
猜你喜欢
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 2013-01-18
  • 2018-08-16
  • 2012-03-30
  • 2021-11-20
相关资源
最近更新 更多