Python在ClassB中更改ClassA实例变量

时间:2015-05-14 08:17:56

标签: python class object dill

我试图通过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

2 个答案:

答案 0 :(得分:2)

我想你在问:

  

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

天真的方法:

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

这种方法的问题在于它破坏了B中不存在的任何预先存在的属性,例如。

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

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

B.__dict__.update(A.__dict__)

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

答案 1 :(得分:1)

updateValue

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