python - 输入:原始值或容器
问题描述
我想创建一个参数化类型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
. 我有什么不同的做法?
解决方案
你很接近 - 你需要做RawOrVariable = Union[T, Variable[T]]
而不是RawOrVariable[T] = Union[T, Variable[T]]
.
请注意,后者不是有效的 Python 代码——该RawOrVariable
变量不是在运行时定义的。
有关更多详细信息,请参阅有关泛型类型别名的 mypy 文档。PEP 484 还简要地给出了一个示例,说明泛型类型别名在此处的第二个示例中是什么样子的。
推荐阅读
- c++ - C++ set:根据自定义比较器查找和删除元素
- java - 根据游戏的输赢增加和减少“金额”
- typescript - 为什么 TypeScript 会抛出“void is not assignable”错误?
- r - 使用 kableExtra 调整长表
- r - 按列总计获取所有列的百分比
- mongodb - 为什么我的 MongoDB Realm GraphQL 端点返回日期是这样的,我如何在客户端解析它
- angular - Angular 获取 http 响应
- javascript - 更改数组元素值的样式
- javascript - 单击主选择框时如何自动打开第二个选择框?
- python - Python:我如何计算一个单词在文本文件中出现的次数