copyreg注册pickle支持功能(2)pickle和marshal模块永久存储Python数据(必读进阶Python教程)(参考资料)
该copyreg
模块提供了一种定义酸洗特定对象时使用的函数的方法。的pickle
和copy
酸洗/复制这些对象时模块使用这些功能。该模块提供有关非类的对象构造函数的配置信息。这样的构造函数可以是工厂函数或类实例。
copyreg.
constructor
(对象)- 声明对象是有效的构造函数。如果object不可调用(因此无法作为构造函数),则引发
TypeError
。
copyreg.
pickle
(类型,功能,构造函数=无)- 声明该函数应该用作类型类型的对象的“简化”函数。 函数应返回包含两个或三个元素的字符串或元组。
可选的构造函数参数(如果提供)是一个可调用的对象,可以在调用时使用函数在酸洗时返回的参数元组来重建对象。
TypeError
如果object是一个类或构造函数不可调用,则会引发 。有关函数和构造函数
pickle
所需接口的更多详细信息,请参阅该模块。请注意,pickler对象或子类的 属性也可用于声明缩减函数。dispatch_table
pickle.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...