我正在使用FastAPI创建一个非常简单的虚拟API。为此,我使用枚举来定义post请求的需求体,并模拟从API方法到虚拟方法的DB调用。
为了在我的端点上有适当的体请求,我在类定义上使用Pydantic的BaseModel,但是出于某种原因,我得到了这个错误
File "pydantic/main.py", line 406, in pydantic.main.BaseModel.__setattr__
AttributeError: 'MagicItem' object has no attribute '__fields_set__'
我不知道问题出在哪里,下面是生成这些内容的代码:
我现在有点迷失了,因为我看不到这么简单的代码中的错误。
发布于 2022-09-09 16:12:14
您基本上完全放弃了MagicItem
上的Pydantic MagicItem
方法。一般来说,如果您必须重写Base的init-方法(在您的情况下,您的不是),您至少应该在您自己的内部调用它,如下所示:
super().__init__(...)
Pydantic在init方法中做了很多魔术。其中之一是__fields_set__
属性的设置。这就是为什么你要犯这个错误。
我建议完全删除您的自定义__init__
方法。
使用Pydantic模型的主要好处之一是,您不需要担心编写这样的模板。看看他们的文档,在我看来真的很好。
PS:
如果您坚持是因为希望能够使用位置参数初始化您的MagicItem
,那么只需这样做:
class MagicItem(BaseModel):
name: str
damage: Damage
def __init__(self, name: str, damage: Damage) -> None:
super().__init__(name=name, damage=damage)
https://stackoverflow.com/questions/73664830
复制相似问题