Python 如何使用pydantic创建uuid子级

Python 如何使用pydantic创建uuid子级,python,fastapi,pydantic,Python,Fastapi,Pydantic,我尝试创建Foo的子对象,每个子对象都应该有自己的uuid。在真正的代码中,不会只创建Foo的子实例。子对象稍后将保存在数据库中,uuid将从数据库中检索正确的对象 在第一个代码段中,我尝试使用init方法,这会导致AttributeError。我还尝试使用classmethod,这会导致丢失子对象中的所有字段 如果我输入第二个代码段,每个孩子都会得到相同的uuid,这对我来说很有意义,因为它是作为默认值传递的 我可以将uuid创建放在子对象中,尽管在使用继承时这感觉是错误的 是否有更好的方法为

我尝试创建Foo的子对象,每个子对象都应该有自己的uuid。在真正的代码中,不会只创建Foo的子实例。子对象稍后将保存在数据库中,uuid将从数据库中检索正确的对象

在第一个代码段中,我尝试使用init方法,这会导致AttributeError。我还尝试使用classmethod,这会导致丢失子对象中的所有字段

如果我输入第二个代码段,每个孩子都会得到相同的uuid,这对我来说很有意义,因为它是作为默认值传递的

我可以将uuid创建放在子对象中,尽管在使用继承时这感觉是错误的

是否有更好的方法为每个孩子创建uuid

# foo_init_.py
class Foo(BaseModel):
    def __init__(self):
          self.id_ = uuid4()
# >>> AttributeError: __fields_set__

# foo_classmethod.py
class Foo(BaseModel):
    @classmethod
    def __init__(cls):
          cls.id_ = uuid4()
# >>> Bar loses id_ fields

您可以使用以下参数:

class Foo(BaseModel):
    id_: UUID = Field(default_factory=uuid4)
您可以使用以下参数:

class Foo(BaseModel):
    id_: UUID = Field(default_factory=uuid4)