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

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

File "pydantic/main.py", line 406, in pydantic.main.BaseModel.__setattr__ 
AttributeError: 'MagicItem' object has no attribute '__fields_set__'

我不确定问题出在哪里,以下是我生成这一切的代码:

enter image description here

enter image description here

enter image description here

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

推荐答案

基本上,您在MagicItem上完全丢弃了PYDANIC BaseModel.__init__方法.一般来说,如果您绝对必须覆盖基本模型的init-方法(在您的示例中,您是don't),则至少应该在您自己的内部调用它,如下所示:

super().__init__(...)

皮丹蒂克在初始化方法中使用了很多魔法.其中之一就是设置__fields_set__属性.这就是为什么你会得到那个错误.

我建议完全删除您的定制__init__方法.

使用PYDANIC模型的主要好处之一是,您don't必须担心编写这样的样板.看看他们的documentation分,在我看来真的很好.

PS:

如果您insist是因为您希望能够使用positional个参数来初始化您的MagicItem,则只需执行以下操作:

class MagicItem(BaseModel):
    name: str
    damage: Damage

    def __init__(self, name: str, damage: Damage) -> None:
        super().__init__(name=name, damage=damage)

Python相关问答推荐

如何终止带有队列的Python进程?+ 队列大小的错误?

使用from_pandas将GeDataFrame转换为polars失败,ArrowType错误:未传递numpy. dype对象

Python中是否有方法从公共域检索搜索结果

如何让 turtle 通过点击和拖动来绘制?

Python在tuple上操作不会通过整个单词匹配

对Numpy函数进行载体化

_repr_html_实现自定义__getattr_时未显示

从numpy数组和参数创建收件箱

将tdqm与cx.Oracle查询集成

梯度下降:简化要素集的运行时间比原始要素集长

从spaCy的句子中提取日期

根据列值添加时区

创建可序列化数据模型的最佳方法

joblib:无法从父目录的另一个子文件夹加载转储模型

关于两个表达式的区别

如何删除重复的文字翻拍?

BeautifulSoup-Screper有时运行得很好,很健壮--但有时它失败了::可能这里需要一些更多的异常处理?

如何在Gekko中处理跨矢量优化

Regex用于匹配Python中逗号分隔的AWS区域

以极轴表示的行数表达式?