Python中如何遍历dataclass实例的属性并批量修改属性值?
Python dataclass实例属性遍历与修改实现
错误原因分析
代码抛出TypeError的核心原因是:fields(Foo)返回的是Python dataclass的Field元数据对象,而非类实例对应的属性值,直接对Field对象做乘法运算自然会触发类型不支持的错误。
正确实现方案
你可以通过getattr()获取实例属性值,setattr()动态修改实例属性值,同时可以加类型判断只处理整数类型的属性,无需为每个属性单独写修改方法,实现代码如下:
from dataclasses import dataclass, fields @dataclass class Foo: a: int b: int # 可添加非int类型属性验证效果 c: str def __post_init__(self): self.double_attributes() def double_attributes(self): # 遍历当前类的所有字段元数据 for field_meta in fields(self.__class__): # 只处理类型为int的字段 if field_meta.type is int: # 获取实例对应属性的当前值 current_val = getattr(self, field_meta.name) # 修改后写回实例 setattr(self, field_meta.name, current_val * 2) x = { 'a': 1, 'b': 2, 'c': '测试' } y = Foo(**x) print(y) # 输出 Foo(a=2, b=4, c='测试')
核心方法说明
fields():传入dataclass类或者实例,返回所有定义的字段元数据列表,每个元数据包含字段名name、字段类型type等属性getattr(实例, 属性名):动态获取实例对应属性的值setattr(实例, 属性名, 新值):动态给实例的对应属性赋值
内容的提问来源于stack exchange,提问作者M.wol
相关产品推荐
相关产品推荐

