from pydantic import BaseModel
class A(BaseModel):
date = ''
class B(A):
person: float
def __init__(self):
self.person = 0
B()
尝试启动类 B 但引发错误 AttributeError: 'B' object has no attribute 'fields_set',为什么?
这是因为你覆盖了
__init__
并且没有在那里调用 super
,所以 Pydantic 无法通过设置正确的字段来发挥它的魔力。
使用 pydantic,你很少需要实现你的
__init__
大多数情况都可以通过不同的方式解决:
from pydantic import BaseModel
class A(BaseModel):
date = ""
class B(A):
person: float = 0
B()
我将其与 Pydantic 的 EXCELLENT 答案一起使用,以完全避免验证错误,如果存在验证错误,则发出警告。
答案位于:如何防止 Pydantic 在 ValidationError 上抛出异常
不幸的是,我不断得到:
EXECEPTION, e: 'MyObjectNameHere' object has no attribute '__pydantic_fields_set__'
这种情况仅发生在 MyObjectNameHere 上,而不是 MyWeirdOtherObjectNameHere 上。 这非常非常令人困惑。
解决了这个问题,确定问题是初始化。 Wierd 对象的字段定义包括以下格式:
someFieldName: Optional[bool]
将其更改为以下内容即可使其工作:
someFieldName: Optional[bool] = False
这消除了 pydantic_fields_set 错误,神奇!
编码快乐!