特定のクラスの定義とルールをコピーせずに、クラスのすべてのインスタンスをディープコピーしたいと思います。
使用目的は、クラス「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"
しかし、アイデアは次のように置き換えることです:
VMPast=copy.deepcopy(VM1)
作業コードについては、インスタンスと辞書をコピーしますが、定義はコピーしません。
その理由は、私のプログラムでディープコピーバージョンを使用する場合です(この方法:)
VMPast=copy.deepcopy(VM1)
VM1.MyMethod(VMPast.MyButton[-1])
次のエラーがスローされます。
AttributeError: AttributeSetter instance has no __call__ method
次の値のため:
VMPast.MyButton[-1]
次のように送信されました。
'__deepcopy__'
私が意図する実際の置換値の代わりに...(ボタン)、したがって、VMPastがすでにVM内のインスタンスの作業コピーである場合、これは deepcopy を返す代わりに機能します! もう 1 つのことは、インスタンスが動的であることです。元のクラスがその時点で持つ名前や値を事前に知りません。どうもありがとうございました!