copyreg --- 註冊 pickle 支援函式

原始碼:Lib/copyreg.py


The copyreg module offers a way to define functions used while pickling specific objects. The pickle and copy modules use those functions when pickling/copying those objects. The module provides configuration information about object constructors which are not classes. Such constructors may be factory functions or class instances.

copyreg.constructor(object)

宣告 object 是一個有效的建構函式。如果 object 不可呼叫(因此不可作為有效的建構函式),則會引發 TypeError

copyreg.pickle(type, function, constructor_ob=None)

宣告 function 應該用作 type 型別之物件的「歸約 ("reduction")」函式。function 必須回傳字串或包含 2 到 6 個元素的元組。有關 function 介面的更多詳細資訊,請參閱 dispatch_table

constructor_ob 參數是一個遺留功能,現在已被忽略,但如果要傳遞它的話則必須是個可呼叫物件。

請注意,pickler 物件或 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...