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 的属性,仍然存在问题。但我认为这是一个不同的问题。
我正在尝试通过 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 的属性,仍然存在问题。但我认为这是一个不同的问题。