Bru*_*noX 8 python pydantic fastapi
我正在使用 FastAPI 创建一个非常简单的虚拟 API。为此,我使用枚举来定义发布请求的需求主体,并模拟从 API 方法到虚拟方法的数据库调用。
为了在我的端点上有正确的主体请求,我在类定义上使用 Pydantic 的 BaseModel 但由于某种原因我收到此错误
File "pydantic/main.py", line 406, in pydantic.main.BaseModel.__setattr__
AttributeError: 'MagicItem' object has no attribute '__fields_set__'
Run Code Online (Sandbox Code Playgroud)
我不确定问题是什么,这是生成所有这些的代码:
我现在有点迷失了,因为我没有在如此简单的代码中看到错误。
Dan*_*erg 15
你基本上完全放弃了BaseModel.__init__你的MagicItem. 一般来说,如果您绝对必须重写基本模型的初始化方法(在您的情况下,您不需要),您至少应该在自己的内部调用它,如下所示:
super().__init__(...)
Run Code Online (Sandbox Code Playgroud)
Pydantic 在 init 方法中发挥了很多作用。其中之一就是__fields_set__属性的设置。这就是您收到该错误的原因。
我建议完全删除您的自定义__init__方法。
使用 Pydantic 模型的主要好处之一是您不必担心编写这样的样板文件。查看他们的文档,我认为这非常好。
附:
如果您坚持这样做是因为您希望能够使用位置MagicItem参数来初始化您的变量,您可以这样做:
class MagicItem(BaseModel):
name: str
damage: Damage
def __init__(self, name: str, damage: Damage) -> None:
super().__init__(name=name, damage=damage)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14938 次 |
| 最近记录: |