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 类型的对象的“归约”函数。 function 必须返回一个字符串或包含二至六个元素的元组。 请参阅 dispatch_table 了解有关 function 的接口的更多细节。

constructor_ob 形参是一个旧式特性并且现在会被忽略,但如果传入则它必须为一个可调用对象。

请注意一个 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...