copyreg --- 注冊配合 pickle 模塊使用的函數(shù)?

源代碼: Lib/copyreg.py


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

copyreg.constructor(object)?

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

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

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

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 屬性也可以被用來聲明歸約函數(shù)。

示例?

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

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