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)
这正是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命名key为value,但是该属性被存储 - 使它更加清晰.
| 归档时间: |
|
| 查看次数: |
3147 次 |
| 最近记录: |