2

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

谁能告诉我如何做到这一点:

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
4

2 回答 2

2

我想你在问:

给定对象 A 和对象 B,如何一步(或以编程方式)将 A 的所有属性复制到 B?

天真的方法:

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 的类及其父类的属性,仍然存在问题。但我认为这是一个不同的问题。

于 2015-05-14T08:43:05.410 回答
1

在你的updateValue

def updateValue(self):
    self.ca.DATA = "new value"
于 2015-05-14T08:25:55.690 回答