gpt4 book ai didi

python - 如何使用包含可选模型的元组定义嵌套的 Pydantic 模型?

转载 作者:行者123 更新时间:2023-12-04 08:08:11 26 4
gpt4 key购买 nike

我目前正在使用以下嵌套模型(FinalModel):

class Model1(BaseModel):
count: int

class Model2(BaseModel):
method: str
selector: dict
count: int

class FinalModel(BaseModel):
slow: bool
models: Tuple[
Optional[Model1],
Optional[Model2],
]]
我希望元组具有可变长度,因为我想根据要求传入 Model1 或 Model2 或两者。但是,元组似乎期望固定长度为 2。
请注意,Union 不是我的选择,因为我预计 future 模型数量会增加,并且可能的组合也会增加。

最佳答案

要指定多种类型的可变长度元组,您可以使用省略号文字 ...Union ,如下图:

class FinalModel(BaseModel):
slow: bool
models: Tuple[Union[Model2, Model1], ...]
使用时 Union还需牢记 that :

However, as can be seen above, pydantic will attempt to 'match' any of the types defined under Union and will use the first one that matches.[...]

As such, it is recommended that, when defining Union annotations, the most specific type is included first and followed by less specific types.


因此,对于您的示例, Model2必须先于 Model1Union , 由于 Model2 的对象当解析与 Model1 匹配时,其他成员将被丢弃。或 use extra = forbid .
class Model1(BaseModel):
count: int

class Config:
extra = "forbid"

关于python - 如何使用包含可选模型的元组定义嵌套的 Pydantic 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66113536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com