Pydantic AttributeError:''对象没有属性'__fields_set__'

问题描述 投票:0回答:2
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',为什么?

python class inheritance pydantic
2个回答
7
投票

这是因为你覆盖了

__init__
并且没有在那里调用
super
,所以 Pydantic 无法通过设置正确的字段来发挥它的魔力。

使用 pydantic,你很少需要实现你的

__init__
大多数情况都可以通过不同的方式解决:

from pydantic import BaseModel

class A(BaseModel):
    date = ""

class B(A):
    person: float = 0

B()

0
投票

我将其与 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 错误,神奇!

编码快乐!

© www.soinside.com 2019 - 2024. All rights reserved.