从字典或列表设置类实例变量
设置实例变量
我有两个列表:
var_names = ['var1', 'var2', 'var3']
var_values = [1, 2, 3]
也可以是字典:
dict = {'var1': 1, 'var2':2, 'var3':3}
其实我这些数据是从pandas里拿来的,不过把它转成字典是很简单的。
这些实例变量的列表长度是会变化的,但在创建一个类的时候,我想把它们添加到实例变量里。比如说,上面给出的列表:
self.var1 = var_values[0]
self.var2 = var_values[1]
self.var3 = var_values[2]
如果变量名和值在一个字典里,代码也可以类似。我记得大约一年前用过setattr,但现在想不起来怎么用了。有没有什么建议?我用搜索找的结果都不太好。
2 个回答
2
这段代码应该在Python 3中能正常运行:
class testclass(object):
# constructor
def __init__(self, inputdict):
# iterate through dictionary
for key, value in inputdict.items():
self.__setattr__(key, value)
# usage
test = testclass({'key1': 1})
print(test.key1)
不过我不太明白为什么你需要这样的东西。你不能确定某个属性是否真的存在。
在我看来,用一个内部字典和一个获取方法来构建会更容易处理。
[编辑] 打错字了
6
我想你在找这个:
self.__dict__.update(zip(var_names,var_values))
你也可以使用 itertools.izip
来提高效率,因为它可以避免生成 zip
返回的临时列表。