我可以在 Python 的 Union 上拥有可变数量的类型吗?
Can I have a variable number of types on Union in Python?
我有这样的结构:
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())
成功获取了我要使用的类型列表,但解包似乎不起作用
我能做到吗?
写下这个问题帮助我思考它。解决方案是,不是将 child_mapping.values()
转换为 list
,而是将其转换为 tuple
.
所以解决方案是:
class Something(BaseModel):
some_child: Union[tuple(child_mapping.values())]
我有这样的结构:
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())
成功获取了我要使用的类型列表,但解包似乎不起作用
我能做到吗?
写下这个问题帮助我思考它。解决方案是,不是将 child_mapping.values()
转换为 list
,而是将其转换为 tuple
.
所以解决方案是:
class Something(BaseModel):
some_child: Union[tuple(child_mapping.values())]