copyreg —ピクルスサポート関数の登録—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.9/library/copyreg
移動先:案内検索

copyreg — pickle サポート関数を登録します

ソースコード: :source: `Lib / copyreg.py`



copyreg モジュールは、特定のオブジェクトを選択するときに使用される関数を定義する方法を提供します。 pickle および copy モジュールは、これらのオブジェクトをピクルス/コピーするときにこれらの関数を使用します。 このモジュールは、クラスではないオブジェクトコンストラクターに関する構成情報を提供します。 このようなコンストラクターは、ファクトリ関数またはクラスインスタンスである可能性があります。

copyreg.constructor(object)
object が有効なコンストラクターであることを宣言します。 object が呼び出せない(したがってコンストラクターとして有効でない)場合、 TypeError が発生します。
copyreg.pickle(type, function, constructor=None)

関数をタイプタイプのオブジェクトの「削減」関数として使用する必要があることを宣言します。 function は、2つまたは3つの要素を含む文字列またはタプルのいずれかを返す必要があります。

オプションのコンストラクターパラメーターは、提供されている場合、呼び出し可能なオブジェクトであり、ピクルス時に関数によって返される引数のタプルで呼び出されたときにオブジェクトを再構築するために使用できます。 TypeError は、 object がクラスであるか、コンストラクタが呼び出されない場合に発生します。

関数およびコンストラクターに期待されるインターフェースの詳細については、 pickle モジュールを参照してください。 ピクラーオブジェクトまたは pickle.Pickler のサブクラスの dispatch_table 属性は、リダクション関数の宣言にも使用できることに注意してください。

以下の例では、pickle関数を登録する方法とその使用方法を示します。

>>> import copyreg, copy, pickle
>>> class C:
...     def __init__(self, a):
...         self.a = a
...
>>> def pickle_c(c):
...     print("pickling a C instance...")
...     return C, (c.a,)
...
>>> copyreg.pickle(C, pickle_c)
>>> c = C(1)
>>> d = copy.copy(c)  
pickling a C instance...
>>> p = pickle.dumps(c)  
pickling a C instance...