pickle 化されたクラスインスタンスが unpickle 化されたとき、 __init__() メソッドは通常呼び出されません 。 unpickle 化の際に __init__() が呼び出される方が望ましい場合、 旧スタイルクラスではメソッド __getinitargs__() を定義することが できます。このメソッドはクラスコンストラクタ (すなわち __init__()) に渡されるべき タプルを 返さなければなりません。 __getinitargs__() メソッドは pickle 時に呼び出されます; この関数が返すタプルはインスタンスの pickle 化データに組み込まれます。
新スタイルクラスでは、プロトコル 2 で呼び出される __getnewargs__() を定義する事ができます。インスタンス生成時に内 部的な不変条件が成立する必要があったり、(タプルや文字列のように)型の __new__()メソッドに指定する引数によってメモリの割り当てを変更す る必要がある場合には__getnewargs__()を定義してください。新スタ イルクラスCのインスタンスは、次のように生成されます。
obj = C.__new__(C, *args)
ここでargsは元のオブジェクトの__getnewargs__()メソッドを 呼び出した時の戻り値となります。__getnewargs__()を定義していな い場合、argsは空のタプルとなります。
クラスは、インスタンスの pickle 化方法にさらに影響を与えることが できます; クラスが __getstate__() メソッドを定義している 場合、このメソッドが呼び出され、返された状態値はインスタンスの内容 として、インスタンスの辞書の代わりに pickle 化されます。 __getstate__() メソッドが定義されていない場合、 インスタンスの __dict__ の内容が pickle 化されます。
unpickle 化では、クラスが __setstate__() も定義していた 場合、unpickle 化された状態値とともに呼び出されます 3.6。__setstate__() メソッドが定義 されていない場合、pickle 化された状態は辞書型でなければならず、 その要素は新たなインスタンスの辞書に代入されます。クラスが __getstate__() と __setstate__() の両方を定義して いる場合、状態値オブジェクトは辞書である必要はなく、これらのメソッド は期待通りの動作を行います。 3.7