copyreg --- 注冊配合 pickle 模塊使用的函數?

源代碼: Lib/copyreg.py


copyreg 模塊提供了可在封存特定對象時使用的一種定義函數方式。 picklecopy 模塊會在封存/拷貝特定對象時使用這些函數。 此模塊提供了非類對象構造器的相關配置信息。 這樣的構造器可以是工廠函數或類實例。

copyreg.constructor(object)?

object 聲明為一個有效的構造器。 如果 object 是不可調用的(因而不是一個有效的構造器)則會引發(fā) TypeError。

copyreg.pickle(type, function, constructor=None)?

聲明該 function 應當被用作 type 類型對象的“歸約函數”。 function 應當返回字符串或包含兩到三個元素的元組。

The optional constructor parameter, if provided, is a callable object which can be used to reconstruct the object when called with the tuple of arguments returned by function at pickling time. A TypeError is raised if the constructor is not callable.

請查看 pickle 模塊了解 functionconstructor 所要求的接口的詳情。 請注意一個 pickler 對象或 pickle.Pickler 的子類的 dispatch_table 屬性也可以被用來聲明歸約函數。

示例?

以下示例將會顯示如何注冊一個封存函數,以及如何來使用它:

>>>
>>> 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...