是否可以以编程方式设置实例属性?

时间:2017-07-31 15:42:21

标签: python

假设我想在Python类中初始化50个变量。我想通过加载一个dict来做到这一点,其中每个键/值对对应一个self.key = value语句,默认情况下都被初始化为None。

我现在的代码是:

    def load_values(self, values):
        for k, v in values.iteritems():  
            if k in self.__dict__.keys(): # if the key in the dict matches a previously
                                          # initialized attribute
                self.k = v

这不起作用,因为Python认为k是属性的名称,而不是。我怎样才能做到这一点?我正在运行Python 2.7。

1 个答案:

答案 0 :(得分:2)

我会使用**kwargssetattr

class Foo(object):

    def load_values(self, **kwargs):
        for key, value in kwargs.iteritems():
            setattr(self, key, value)


foo = Foo()
foo.load_values(egg='bacon', sausages='spam')
# or
foo.load_values(**{'egg': 'bacon', 'sausages': 'spam'})

print(foo.egg) # bacon
print(foo.sausages) # spam