pythonpython-3.7python-dataclasses

Update dataclass fields from a dict in python


How can I update the fields of a dataclass using a dict?

Example:

@dataclass
class Sample:
    field1: str
    field2: str
    field3: str
    field4: str

sample = Sample('field1_value1', 'field2_value1', 'field3_value1', 'field4_value1')
updated_values = {'field1': 'field1_value2', 'field3': 'field3_value2'}

I want to do something like

sample.update(updated_values)

Solution

  • One way is to make a small class and inherit from it:

    class Updateable(object):
        def update(self, new):
            for key, value in new.items():
                if hasattr(self, key):
                    setattr(self, key, value)
    
    @dataclass
    class Sample(Updateable):
        field1: str
        field2: str
        field3: str
        field4: str
    

    You can read this if you want to learn more about getattr and setattr