基于字典的python类变量更新

2024-06-16 14:01:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

假设我想要一个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

Tags: 方法keyinselfformatfor参数字典
2条回答

这正是^{}的用途:

def setVar(self, var):
    for key, value in var.items():
        setattr(self, key, value)

更一般地说,几乎任何时候你发现自己在看evalexec,首先寻找一个像setattr这样的反射函数,你几乎总能找到一个。在


如果您知道您的类正在使用一个简单的__dict__作为实例属性,并且所有这些都是实例属性(这是标准情况,如果您不知道所有这些意味着什么,那么对于您的代码来说也是如此),那么您可以进行以下快速和肮脏的破解:

^{pr2}$

然而,setattr在任何有意义的情况下都可以工作,在大多数没有意义的情况下都会失败,当然,它确切地说明了它在做什么,它将self上的一个名为key的属性设置为value,但是该属性的存储使它变得更干净。在

这个怎么样?在

def setVar(self, var):
    for key, value in var.iteritems():
        setattr(self, key, value)

相关问题 更多 >