Python 改变 B 类中的类实例变量

Python changing ClassA instance variables in ClassB

我正在尝试通过 dill 加载整个 class 实例,而不是一次转储和加载每个 class 变量。

谁能告诉我怎么做:

class Object(object):
    pass

class ClassA:
    def __init__(self):
        self.DATA = "Initial"

class ClassB:
    def __init__(self, CA):
        self.CA = CA

    def updateValue(self):
        #a = dill.load(ClassA.storage)
        a = Object()
        a.DATA = "new value"
        self.CA = a
        print self.CA.DATA

CA = ClassA()
CB = ClassB(CA)
CB.updateValue()
print CA.DATA

所以输出是:

new value
new value

在你的updateValue

def updateValue(self):
    self.ca.DATA = "new value"

我想你在问:

Given object A and object B, how can I copy all of A's attributes to B in one step (or programatically)?

天真的方法:

B.__dict__ = dict(A.__dict__) # make a copy so objects don't share same dict

这种方法的问题是它破坏了 B 中任何先前存在但 A 中不存在的属性。例如

B.attr = "some value"
B.__dict__ = dict(A.__dict__)
print(hasattr(B, "attr")) # expect False

更好的方法。这种方法复制了 A 的属性,并留下了存在于 B 上但不存在于 A 上的任何属性。

B.__dict__.update(A.__dict__)

但是,如果要复制 A 的 class 及其父 class 的属性,仍然存在问题。但我认为这是一个不同的问题。