Python在ClassB中更改ClassA实例变量
我试图通过dill加载整个类实例,而不是一次一个地转储和加载每个类变量 有人能告诉我怎么做吗:Python在ClassB中更改ClassA实例变量,python,class,object,dill,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
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"
我想你是在问:
给定对象A和对象B,如何一步(或编程)将A的所有属性复制到B
天真的方法:
B.__dict__ = dict(A.__dict__) # make a copy so objects don't share same dict
这种方法的问题在于,它会破坏B中任何在A.eg中不存在的预先存在的属性
B.attr = "some value"
B.__dict__ = dict(A.__dict__)
print(hasattr(B, "attr")) # expect False
更好的方法。这种方法复制A的属性,并将存在于B上但不存在于A上的任何属性单独保留
B.__dict__.update(A.__dict__)
但是,如果要复制的类及其父类上的属性仍然存在问题。但我认为这是一个不同的问题 谢谢,但问题是不必指定“数据”就可以完成吗?您的用例是什么?我是说,你想实现什么?从问题来看,您似乎想更改一个类的成员。我弄错了吗?谢谢,正是我想要的。我是莳萝的作者。我认为您不需要为此进行序列化,除非您希望跨会话持久化对象@沙丘显示了更合适的路线。