【发布时间】:2021-10-26 01:33:18
【问题描述】:
我有这样的结构:
from enum import Enum
class MainEnum(str, Enum):
A = "AA"
B = "BB"
...
class ChildAEnum(str, Enum):
C = "CC"
D = "DD"
class ChildBEnum(str, Enum):
E = "EE"
F = "FF"
...
child_mapping = {
MainEnum.A: ChildAEnum
MainEnum.B: ChildBEnum
...
}
MainEnum 上的每个 Enum 都有另一个 Enum 与之关联并由 child_mapping 映射指示。
我想要一个Union 类型提示,它可以是child_mapping 中的任何一个值。我不知道它是否相关,但我使用的是pydantic,我希望它用于自动验证该字段。
手动,它会是:
class Something(BaseModel):
some_child: Union[ChildAEnum, ChildBEnum]
但我希望能够将另一个键值对添加到 child_mapping 并让它被 Union 自动识别。
我尝试了以下方法:
class Something(BaseModel):
some_child: Union[*list(child_mapping.values())]
list(child_mapping.values()) 成功为我获取了我想要使用的类型列表,但解包似乎不起作用
我能做到吗?
【问题讨论】:
-
我认为答案是:不,你不是(很遗憾)。静态类型检查器无法理解动态计算的表达式。
标签: python python-3.x enums python-typing pydantic