pickle
を使用してバイナリファイルに書き込むオブジェクトがあるとします。のは、オブジェクトグラフは次のようになりましょう:pickleオブジェクトを読み込んで特定の参照を解決する方法
foo1
+--->bar
| \--->context
+--->baz
| +--->context
| \--->qux
\--->context
は今context
オブジェクトは、大きなデータ構造であり、quxのすべてのインスタンスは同じです。 (私たちのデザイン内の他のすべてのクラスをし、実際には)foo
、bar
とbaz
が属するクラスのために
def __getstate__(self):
my_dict = dict(self.__dict__)
my_dict['context'] = None # We don't save the context
return my_dict
:したがって、私たちはとピクルスプロセスのうち、これらのcontexxt
のオブジェクトを残すことにしました。
load()
オブジェクトをメモリに戻すと、すべてのcontext
参照を指定したコンテキストに戻すことができます。オブジェクトツリーを再帰的に歩くことでこれを行うことができますが、pickle
には、データをメモリにロードするときに値context
の値を埋め込むより洗練されたソリューションがあるかどうか疑問に思っていますか?
あなたは[ '__setstate__']を探している(HTTPS ://docs.python.org/3/library/pickle.html#object.__setstate__)または何か不足していますか? –
@IljaEverilä:問題は、 '__setstate__'にコンテキストを返すような追加パラメータがないことです。それにもかかわらず、私は* persistent pickling *(https://docs.python.org/3.2/library/pickle.html#pickle-persistent)で答えを見つけたと思います。 –
ニースは、それを知らなかった(外側のオブジェクトサポートへの参照)。あなた自身の発見は行く道のように思える。 –