如何使用变量向对象添加参数

时间:2017-02-23 08:46:12

标签: python

我试图使用循环将一些变量放入容器(对象)。

我创建了以下类

class Box():
    pass

现在我想初始化类并从我的文本文件中添加变量。我的文本文件如下:

a = 1
b = 2
c = 3
d = 4

我尝试了以下代码

vars = Box()

filename = ('inputfile.txt')

with open (filename) as f:
    for line in f:
        parts = line.split()
        var_name = str(parts[0])
        var_value = parts[2]
        vars.var_name = var_value

我无法找出为什么这种方法不起作用。

4 个答案:

答案 0 :(得分:2)

我认为你要做的是使用一个类作为数据的存储介质。正如asongtoruin已经说过,你可以使用字典。 否则你需要让这个课真正成为一个东西:

class Box():
    def __init__(self):
        pass
    def __getitem__(self, name):
        return getattr(self, name)
    def __setitem__(self, name, value):
        return setattr(self, name, value)

然后您可以使用几乎所有代码:

vars = Box()

filename = ('inputfile.txt')

with open (filename) as f:
    for line in f:
        parts = line.split()
        var_name = str(parts[0])
        var_value = parts[2]
        vars[var_name] = var_value

print(vars.a)

为什么你的工作不起作用已经由barak manos解释:vars.var_name不使用变量var_name的值,因为调用类方法的语法不支持这种表示法(有充分的理由)。

答案 1 :(得分:1)

当你这样做时

vars.var_name = var_value

等于将密钥'var_name'添加到字典vars.__dict__

我认为你想要的是setattr。 而不是vars.var_name = var_value,请使用:

setattr(vars, var_name, var_value)

答案 2 :(得分:0)

也许尝试像

这样的东西
vars[var_name + ''] = var_value

(没有python代码)

答案 3 :(得分:0)

为什么不使用setattr()?

setattr(Box, "var_name", var_value)