11.3. copy_reg — 注册泡菜支持函数 — Python 文档

来自菜鸟教程
Python/docs/2.7/library/copy reg
跳转至:导航、​搜索

11.3. 复制注册表 - 登记泡菜支持功能

笔记

copy_reg 模块已在 Python 3 中重命名为 copyreg2to3 工具将在将您的源代码转换为 Python 3 时自动调整导入。


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

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

声明 函数 应用作 类型 类型对象的“归约”函数; type 不能是“经典”类对象。 (经典类的处理方式不同;有关详细信息,请参阅 pickle 模块的文档。) function 应该返回一个字符串或一个包含两个或三个元素的元组。

可选的 constructor 参数(如果提供)是一个可调用对象,当使用 函数 在酸洗时返回的参数元组调用时,可用于重建对象。 TypeError

有关 函数构造函数 预期接口的更多详细信息,请参阅 pickle 模块。

11.3.1. 例子

下面的例子想展示如何注册一个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...