基于字典的python类变量更新

Daw*_*zuk 5 python variables dictionary class

如何从字典更新类变量?我想出了一个肮脏的黑客,但我正在寻找(如果有的话)更整洁的东西.

假设我想要一个基于给定字典设置参数的C类.结果,c应该有

class C:
    def setVar(self, var):
        for key in var.keys():
            exec('self.{} = {}'.format(key, var[key]))

D = {'a':1, 'b':2, 'c':3}
c = C()
c.setVar(D)

# c.a = 1
# c.b = 2
# c.c = 3
Run Code Online (Sandbox Code Playgroud)

aba*_*ert 9

这正是setattr为了:

def setVar(self, var):
    for key, value in var.items():
        setattr(self, key, value)
Run Code Online (Sandbox Code Playgroud)

更一般地说,几乎在你发现自己看的时候,eval或者首先exec寻找反射功能setattr,你几乎总能找到一个.


如果您知道您的类正在使用简单__dict__的实例属性,并且所有这些都是实例属性(这是标准情况 - 如果您不知道所有这些意味着什么,那么对于您的代码都是如此),您可以这样做快速和肮脏的黑客:

def setVar(self, var):
    self.__dict__.update(var)
Run Code Online (Sandbox Code Playgroud)

但是,setattr在任何有意义的情况下都可以工作,并且在大多数情况下都没有适当地失败,当然它确切地说明了它正在做什么 - 它设置了一个属性self命名keyvalue,但是该属性被存储 - 使它更加清晰.