pythonpydantic

How to clear pydantic object to default values (reset to defaults)?


I need default values to be cleared in a Pydantic model. I cannot recreate the object because, in my use case, it has references that need to be preserved. Could you please show me the best practices for this?

I need something like this example.

from pydantic import BaseModel, Field


class MyObject(BaseModel):
    value: int = Field(default=1)


my_object = MyObject(value1=2)

# Reference to object, that need to be preserved
reference = [my_object]

# How to clear object to default values?
my_object.clear()
assert reference[0].value == 1

Solution

  • pydantic library provides just the right tools to do this with the BaseModel class.

    What you have to do is to define your clear method to your class :

    from pydantic import BaseModel, Field
    
        def foo():
            return 2
    
    
        class MyObject(BaseModel):
            value1: int = Field(default=1)
            value2: Any = Field(default=foo())
            ...
    
            def clear(self):
                for field, field_info in self.model_fields.items():
                    if field_info.default_factory:
                        default_value = field_info.default_factory()
                    else:
                        default_value = field_info.default
                    setattr(self, field, default_value)
                self.model_fields_set.clear()
    

    What it does is :

    all the above done without recreating an instance. Now

    my_object = MyObject(value1=2)
    
    # Reference to object, that need to be preserved
    reference = [my_object]
    
    # How to clear object to default values?
    my_object.clear()
    assert reference[0].value == 1
    

    Shouldn't raise any error! Feel free to ask any question