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