11.3. copy_reg —注册 pickle 支持Function

Note

copy_reg模块在 Python 3 中已重命名为copyreg2to3工具在将源转换为 Python 3 时将自动适应导入。

copy_reg模块提供了一种定义在腌制特定对象时使用的Function的方法。腌制/复制这些对象时,picklecPicklecopy模块使用这些Function。该模块提供有关不是类的对象构造函数的配置信息。这样的构造函数可以是工厂函数或类实例。

  • copy_reg. constructor(* object *)

    • 语句* object 为有效的构造函数。如果 object *是不可调用的(因此作为构造函数无效),则引发TypeError
  • copy_reg. pickle(* type function * [,* constructor *])

    • 语句* function 应该用作 type *类型对象的“归约”函数; * type 不得为“经典”类对象。 (经典类的处理方式不同;有关详细信息,请参见pickle模块的文档。) function *应该返回字符串或包含两个或三个元素的 Tuples。

可选的* constructor 参数(如果提供)是一个可调用对象,当在 Pickling 时使用 function 返回的参数 Tuples 进行调用时,可用于重建对象。如果 object 是一个类或 constructor *是不可调用的,则将引发TypeError

请参阅pickle模块,以获取* function constructor *所需的接口的更多详细信息。

11.3.1. Example

下面的示例想显示如何注册一个 pickle 函数以及如何使用它:

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