You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pydantic BaseModel子类中自动生成UUID?

解决Pydantic Error类的__pydantic_fields_set__属性错误

你的问题出在重写__init__方法时的初始化顺序错误——手动提前给实例属性赋值后再调用父类构造,干扰了Pydantic BaseModel的内部初始化流程,导致__pydantic_fields_set__这个Pydantic内部依赖的属性未被正确创建。

修复方案1:正确调用父类构造函数

不要手动提前给self.id和self.code赋值,直接将参数传递给父类的__init__方法,由BaseModel负责属性初始化和内部逻辑处理:

import uuid
from pydantic import BaseModel

class Error(BaseModel):
    id: uuid.UUID
    code: int

    def __init__(self, code: int) -> None:
        super().__init__(id=uuid.uuid4(), code=code)

修复方案2:使用Pydantic的default_factory(更推荐)

完全不需要重写__init__,通过Field的default_factory让Pydantic自动生成UUID,更符合框架设计规范,代码也更简洁:

import uuid
from pydantic import BaseModel, Field

class Error(BaseModel):
    id: uuid.UUID = Field(default_factory=uuid.uuid4)
    code: int

# 使用示例
error_instance = Error(code=400)

这样创建Error实例时只需传入code,id会自动由uuid.uuid4()生成,完全避免冗余代码。

内容的提问来源于stack exchange,提问作者oblio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:06:01