是否有内置函数/运算符可用于从字典中解压缩值并将其分配给实例变量?

这就是我打算做的事情:

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 )

另外,在dict的更新方法中包含一个包装器可能是个好方法:

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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top