You are here:  Home » Python » copyreg注册pickle支持功能(2)pickle和marshal模块永久存储Python数据(必读进阶Python教程)(参考资料)

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

copyreg.constructor对象
声明对象是有效的构造函数。如果object不可调用(因此无法作为构造函数),则引发TypeError
copyreg.pickle类型功能构造函数=无
声明该函数应该用作类型类型的对象的“简化”函数。 函数应返回包含两个或三个元素的字符串或元组。

可选的构造函数参数(如果提供)是一个可调用的对象,可以在调用时使用函数在酸洗时返回的参数元组来重建对象。 TypeError如果object是一个类或构造函数不可调用,则会引发 。

有关函数构造函数pickle所需接口的更多详细信息,请参阅该模块。请注意,pickler对象或子类的 属性也可用于声明缩减函数。dispatch_tablepickle.Pickler

示例

下面的示例将展示如何注册pickle函数以及如何使用它:

>>> import copyreg, 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,)
...
>>> copyreg.pickle(C, pickle_c)
>>> c = C(1)
>>> d = copy.copy(c)  # doctest: +SKIP
pickling a C instance...
>>> p = pickle.dumps(c)  # doctest: +SKIP
pickling a C instance...