首页 > 解决方案 > 我可以在 Python 中的 Union 上拥有可变数量的类型吗?

问题描述

我有这样的结构:

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
    ...
}

其中每个Enum都有MainEnum另一个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())成功地为我提供了我想要使用的类型的列表,但解包似乎不起作用

我什至能够做到这一点?

标签: pythonpython-3.xenumspython-typingpydantic

解决方案


写下这个问题帮助我思考这个问题。解决方案是将其转换child_mapping.values()为 a ,而不是将其list转换为 a tuple

所以解决方案是:

class Something(BaseModel):
    some_child: Union[tuple(child_mapping.values())]

推荐阅读