Python创建的对象属性

时间:2017-12-05 13:14:07

标签: python class object attributes set

我想基于作为参数传入的字典来创建对象的属性。这是代码。但它不起作用

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”视为文字,而不是定义的变量。

2 个答案:

答案 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