从字典或列表设置类实例变量

2 投票
2 回答
581 浏览
提问于 2025-04-17 21:17

设置实例变量

我有两个列表:

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 返回的临时列表。

撰写回答