[Python] How to create children with uuid with pydantic

Discussão em 'Python' iniciado por Stack, Agosto 2, 2025.

  1. Stack

    Stack Membro Participativo

    I try to create children of Foo, each should have its own uuid. In the real code no Instance of Foo will be created only it's children. The children will be saved in a database later, the uuid is to retrieve right objects from the database.

    In the first code snippet I tried to use the init method, which results in an AttributeError. I also tried to use a classmethod, which results in loosing all fields in my child objects.

    If I the second snippet every child gets the same uuid, which makes sense to me, as it's passed as default value.

    I could put the uuid creation into the children, though this feels wrong when using inheritance.

    Is there a better way to create a uuid for each child?

    # 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



    from uuid import uuid4, UUID
    from pydantic import BaseModel


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


    class Bar(Foo):
    pass


    class Spam(Foo):
    pass


    if __name__ == '__main__':
    b1 = Bar()
    print(b1.id_) # >>> 73860f46-5606-4912-95d3-4abaa6e1fd2c
    b2 = Bar()
    print(b2.id_) # >>> 73860f46-5606-4912-95d3-4abaa6e1fd2c
    s1 = Spam()
    print(s1.id_) # >>> 73860f46-5606-4912-95d3-4abaa6e1fd2c

    Continue reading...

Compartilhe esta Página