gpt4 book ai didi

python - Pydantic - 动态创建具有多个基类的模型?

转载 作者:行者123 更新时间:2023-12-05 00:45:14 27 4
gpt4 key购买 nike

来自 pydantic docs我明白这一点:

import pydantic

class User(pydantic.BaseModel):
id: int
name: str

class Student(pydantic.BaseModel):
semester: int

# this works as expected
class Student_User(User, Student):
building: str

print(Student_User.__fields__.keys())
#> dict_keys(['semester', 'id', 'name', 'building'])

但是,当我想动态创建一个类似的对象时(遵循 dynamic-model-creation 部分):

# this results in a TypeError
pydantic.create_model("Student_User2", __base__=(User, Student))

我明白了:

TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

问题:如何动态创建类似Student_User

的类

最佳答案

这不是原始问题的答案,但如果您像我一样,并且您所关心的只是拥有一个包含其他模型字段的模型,那么这应该是一个解决方案。

Student_User = pydantic.create_model("Student_User", **{
**{key: (value.type_, value.default) for key, value in User.__fields__.items()},
**{key: (value.type_, value.default) for key, value in Student.__fields__.items()},
**{"building": (str, '')},
})

本质上,我们正在动态创建一个新的 pydantic 模型,并将其字段设置为我们其他模型的字段加上一个额外的自定义字段。

注意:OP 在他的问题中包含了这些行:

print(Student_User.__fields__.keys())
#> dict_keys(['semester', 'id', 'name', 'building'])

所以,我的猜测是他的最终目标是从其他模型中复制字段,并从多个基础创建模型只是实现它的一种方法。

关于python - Pydantic - 动态创建具有多个基类的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64495333/

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