我想基于作为参数传入的字典来创建对象的属性。这是代码。但它不起作用
class Obj(object):
def __init__(self, di):
self.a = 0
self.b = 1
for k in di.keys():
name = 'k' + '_' + 'series'
self.name = None
di = {'c':0,'d':1}
Obj_instance = Obj(di)
print Obj_instance.c_series
我收到以下错误:'Obj'对象没有属性'c'
代码将“name”视为文字,而不是定义的变量。
答案 0 :(得分:2)
使用setattr
class Obj(object):
def __init__(self, di):
for key, value in di.items():
setattr(self, key, value)
一些额外的建议:
你的代码很奇怪。我不确定为什么你希望self.name
评估为self.(eval('name'))
,当它在python的其他地方明显发生时
lower = str.upper
str.lower('Hello') # -> still returns 'hello'
没有必要迭代dictionary.keys()
,尤其是在python 2中。for k in dictionary:
工作正常。如果你想要键和值都使用dictionary.items()
(或python 2中的dictionary.iteritems()
)。
name = 'k' + '_' + 'series'
只创建字符串'k_series'
。您需要能够区分字符串和变量名称。我认为你的意思是k + '_' + series
,但series
永远不会被定义。不要使用+
来连接这样的字符串,使用.format
。
答案 1 :(得分:0)
这将起作用:
class Obj(object):
def __init__(self, di):
self.a = 0
self.b = 1
for key, value in di.items():
key += '_series'
setattr(self, key, value)
di = {'c':0,'d':1}
Obj_instance = Obj(di)
print Obj_instance.c_series