2017-02-23 53 views
1

我想将一些变量放入使用循环的容器(对象)中。如何使用变量将参数添加到对象

我创建了下面的类

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 

我不能找出为什么这个方法是行不通的。

+1

有什么特别的原因不使用字典? – asongtoruin

+0

那你到底希望达到什么目的?即使上述代码以某种方式工作,在每次迭代中设置'vars.var_name = var_value'意味着'vars.var_name'的值将被重复覆盖,并最终达到上次迭代中给出的值。 –

+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的值,因为调用类方法的语法不支持这种表示法(出于很好的理由)。

0

也许你可以试试

vars[var_name + ''] = var_value 

(不Python代码)

0

你为什么不使用SETATTR()?

setattr(Box, "var_name", var_value) 
1

当你

vars.var_name = var_value 

这等于增加的关键'var_name'到字典vars.__dict__

我觉得你想要的东西可以用setattr来实现。 代替vars.var_name = var_value,使用方法:

setattr(vars, var_name, var_value)