如何通过动态变量名引用Python类的实例属性?
动态设置Python类实例属性的方法
问题背景
用户定义了如下Python类:
class myClass(): def __init__(self): self.first = "" self.second = "" self.third = ""
常规的属性设置方式是直接通过实例访问:
myClassVar = myClass() myClassVar.first = "foo" myClassVar.second = "bar"
当尝试通过遍历属性名列表动态设置属性时,写出了如下错误代码并报错myClass has no 'item' member:
varList = ["first", "second", "third"] for item in varList: myClass.item = "whatever I want to set it to"
解决方法
方法一:使用setattr()函数(推荐)
Python内置的setattr()函数专门用于动态设置对象属性,第一个参数是实例对象,第二个是属性名字符串,第三个是要设置的值。修改后的代码如下:
myClassVar = myClass() varList = ["first", "second", "third"] for item in varList: setattr(myClassVar, item, "whatever I want to set it to")
方法二:直接操作实例的__dict__属性
每个类实例都有一个__dict__字典,存储了它的所有实例属性(不包含继承的属性),可以直接通过键值对的方式修改:
myClassVar = myClass() varList = ["first", "second", "third"] for item in varList: myClassVar.__dict__[item] = "whatever I want to set it to"
错误原因说明
原代码的问题有两个:一是直接操作了类myClass而非实例myClassVar,二是用.访问动态变量名——Python中.后面只能跟固定的属性名,无法识别循环中的动态变量item。
内容的提问来源于stack exchange,提问作者milnuts
相关产品推荐
相关产品推荐

