9

そのため、ピクルできないもの (pygame イベント、orderedDicts、時計など) がかなり含まれているオブジェクトがあり、それをディスクに保存する必要があります。

つまり、進行状況を示す文字列を格納するためにこのオブジェクトを取得できれば (1 つの整数だけで十分です)、それをオブジェクトの init に渡すことができ、それらすべてが再構築されます。残念ながら、私が使用しているフレームワーク (Renpy)、オブジェクトを 1 つの整数として保存でき、それを変更できないにもかかわらず、オブジェクトをピクルしてロードしようとします。

だから、私が求めているのは、メソッドをオーバーライドして、pickle がオブジェクトを保存しようとするたびに進行状況の値のみを保存し、オブジェクトをロードしようとするたびに進行状況の値から新しいインスタンスを作成する方法です。

__repr__ メソッドについて少し話しているのを見たことがありますが、自分の状況でこれをどのように使用するかはわかりません。

4

2 に答える 2

13

お探しのフックは です__reduce__(callable, args)タプルを返す必要があります。とがシリアル化され、逆シリアル化でオブジェクトが を介して再作成されcallableます。クラスのコンストラクターが int を取る場合は、次のように実装できます。argscallable(*args)__reduce__

class ComplicatedThing:
    def __reduce__(self):
        return (ComplicatedThing, (self.progress_int,))

タプルに入れることができるオプションの余分なものがいくつかあります。主に、オブジェクト グラフに循環的な依存関係がある場合に役立ちますが、ここでは必要ありません。

于 2015-06-07T23:18:23.460 に答える