是否有一个内置函数/运算符可以用来从字典中解压缩值并将其分配给实例变量?
这就是我打算做的:
c = MyClass()
c.foo = 123
c.bar = 123
# c.foo == 123 and c.bar == 123
d = {'bar': 456}
c.update(d)
# c.foo == 123 and c.bar == 456
类似于update()
从另一个字典加载值但用于普通对象/类实例的字典?
是否有一个内置函数/运算符可以用来从字典中解压缩值并将其分配给实例变量?
这就是我打算做的:
c = MyClass()
c.foo = 123
c.bar = 123
# c.foo == 123 and c.bar == 123
d = {'bar': 456}
c.update(d)
# c.foo == 123 and c.bar == 456
类似于update()
从另一个字典加载值但用于普通对象/类实例的字典?
还有另一种方法是循环遍历 d 中的项目。这与它们将被存储的假设不同,c.__dict__
这并不总是正确的。
d = {'bar': 456}
for key,value in d.items():
setattr(c,key,value)
或者您可以编写一个update
方法作为其中的一部分,MyClass
以便按照c.update(d)
您的预期工作。
def update(self,newdata):
for key,value in newdata.items():
setattr(self,key,value)
查看 setattr 的帮助
setattr(...) setattr(object, name, value) Set a named attribute on an object; setattr(x, 'y', v) is equivalent to ''x.y = v''.
你有没有尝试过
f.__dict__.update( b )
?
此外,也许在字典的更新方法周围有一个包装器会是一种很好的风格:
def update(self, b):
self.__dict__.update(b)
PS:很抱歉没有在@ S.Lott的帖子上发表评论,但我还没有代表。
您可以尝试这样做:
def to_object(my_object, my_dict):
for key, value in my_dict.items():
attr = getattr(my_object, key)
if hasattr(attr, '__dict__'):
to_object(attr, value)
else:
setattr(my_object, key, value)
obj = MyObject()
data = {'a': 1, 'b': 2}
to_object(obj, data)