You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:30:04