我可以在 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())]