我想深度复制一个类的所有实例,但不复制给定类的定义和规则。在
如果我有一个类“OriginalClass”,它的实例就是我存储的变量。当程序继续运行时,我希望能够使用OriginalClass以前的“快照”,从中我将只使用值(我不会在那里存储新的值,因此不需要继承规则)。在
上面这个简单的例子很管用,和我想做的非常相似:import copy
class VM:
#nothing in the class
pass
VM1=VM()
VM1.test=dict()
VM1.test['one']="hello"
def printmytext(VMPast=copy.deepcopy(VM1)):
g.es(VMPast.test['one'])
VM1.test="Bye"
printmytext() #Returns "hello"
但我们的想法是:
^{pr2}$
对于工作代码,我不知道如何编写,它将复制实例和字典,但不复制定义。在
原因是,在我的程序中使用deepcopy版本时(这样:)VMPast=copy.deepcopy(VM1)
VM1.MyMethod(VMPast.MyButton[-1])
它抛出以下错误:AttributeError: AttributeSetter instance has no __call__ method
因为:VMPast.MyButton[-1]
已发送为:'__deepcopy__'
而不是实际的替代值,我想。。。(按钮),因此,如果VMPast已经是VM中实例的工作副本,那么这将在返回deepcopy时起作用!
另一件事是,实例是动态的,我事先不知道原始类在那一刻将拥有的名称或值。
非常感谢你!在