从 python 中的字典更新数据类字段

Nag*_*S N 5 python python-3.7 python-dataclasses

如何使用字典更新数据类的字段?

例子

@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'}
Run Code Online (Sandbox Code Playgroud)

我想做类似的事情

sample.update(updated_values)
Run Code Online (Sandbox Code Playgroud)

bb1*_*328 10

一种方法是创建一个小类并继承它:

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
Run Code Online (Sandbox Code Playgroud)

如果您想了解有关 getattr 和 setattr 的更多信息,可以阅读此内容


小智 7

如果您有基本数据类,则更新底层__dict__似乎可行:

sample.__dict__.update({ 'field1': 'value1' })
Run Code Online (Sandbox Code Playgroud)