我试图使用循环将一些变量放入容器(对象)。
我创建了以下类
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
我无法找出为什么这种方法不起作用。
答案 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)