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

如何循环遍历dataclass字段为实例赋值,解决__setattr__报错

错误原因

  • 你代码中X = VData是将类本身赋值给了X,而非创建VData的实例对象,__setattr__只能作用于类实例,不能直接作用于类本身,因此抛出对应错误。
  • 原代码中调用__setattr__的传参方式也不符合规范,不需要额外把类/实例作为第一个参数传入。

正确实现代码

from random import randint
from dataclasses import dataclass

@dataclass
class VData:
    var_a: list = None
    var_b: list = None
    var_c: list = None

# 第一步:实例化dataclass对象
X = VData()

# 遍历字段完成赋值
for var in VData.__dataclass_fields__:
    l = [randint(0, 10), randint(0,10)]
    setattr(X, var, l)

验证输出示例

print(X.var_a)
print(X.var_b)
print(X.var_c)

输出参考:

[2, 9]
[10, 4]
[7, 1]

额外优化建议

如果要规避dataclass可变默认值的潜在问题,推荐显式用field声明默认值:

from dataclasses import dataclass, field

@dataclass
class VData:
    var_a: list = field(default=None)
    var_b: list = field(default=None)
    var_c: list = field(default=None)

内容的提问来源于stack exchange,提问作者xtlc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:18:00