Python中如何迭代访问动态设置的类对象属性?
Python中如何迭代访问动态设置的类对象属性?
你遇到的问题很典型——想用循环变量直接访问属性,但Python会把obj.i里的i当成字面量的属性名,而不是循环变量的取值,所以才会报错。其实解决方法很简单,用和setattr对应的getattr函数就可以了,它能通过字符串形式的属性名来获取对象的属性值。
给你两种最直接的实现方式:
1. 循环中直接打印属性值
既然你已经有了属性名的列表fds,直接遍历这个列表,用getattr获取对应属性就行:
class MyClass: pass obj = MyClass() fds = ['a','b','c'] # 动态设置属性(你的原有代码) for i in fds: setattr(obj, i, [i]) # 迭代访问并打印属性 for attr_name in fds: print(getattr(obj, attr_name))
运行这段代码就会输出你想要的结果:
['a'] ['b'] ['c']
2. 收集属性值到列表中
如果想把这些属性值整理成一个列表方便后续检查,用列表推导式就能搞定:
# 收集所有属性值到列表 attribute_values = [getattr(obj, attr) for attr in fds] print(attribute_values) # 输出: [['a'], ['b'], ['c']]
额外小提示
如果担心某些属性可能不存在(比如fds里有个名字写错了),可以给getattr加个默认值,避免报错:
print(getattr(obj, attr_name, "属性不存在"))
如果想查看对象所有的实例属性,还可以遍历obj.__dict__(这是存储实例属性的字典),不过这种方法会包含所有实例属性,如果你只需要fds里指定的那些,还是前面的方法更精准。
内容来源于stack exchange
相关产品推荐
相关产品推荐

