首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pydantic对象没有属性'__fields_set__‘错误

Pydantic对象没有属性'__fields_set__‘错误
EN

Stack Overflow用户
提问于 2022-09-09 16:06:49
回答 1查看 86关注 0票数 2

我正在使用FastAPI创建一个非常简单的虚拟API。为此,我使用枚举来定义post请求的需求体,并模拟从API方法到虚拟方法的DB调用。

为了在我的端点上有适当的体请求,我在类定义上使用Pydantic的BaseModel,但是出于某种原因,我得到了这个错误

代码语言:javascript
运行
复制
File "pydantic/main.py", line 406, in pydantic.main.BaseModel.__setattr__ 
AttributeError: 'MagicItem' object has no attribute '__fields_set__'

我不知道问题出在哪里,下面是生成这些内容的代码:

我现在有点迷失了,因为我看不到这么简单的代码中的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-09 16:12:14

您基本上完全放弃了MagicItem上的Pydantic MagicItem方法。一般来说,如果您必须重写Base的init-方法(在您的情况下,您的不是),您至少应该在您自己的内部调用它,如下所示:

代码语言:javascript
运行
复制
super().__init__(...)

Pydantic在init方法中做了很多魔术。其中之一是__fields_set__属性的设置。这就是为什么你要犯这个错误。

我建议完全删除您的自定义__init__方法。

使用Pydantic模型的主要好处之一是,您不需要担心编写这样的模板。看看他们的文档,在我看来真的很好。

PS:

如果您坚持是因为希望能够使用位置参数初始化您的MagicItem,那么只需这样做:

代码语言:javascript
运行
复制
class MagicItem(BaseModel):
    name: str
    damage: Damage

    def __init__(self, name: str, damage: Damage) -> None:
        super().__init__(name=name, damage=damage)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73664830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档