copyreg — 注册 pickle 支持函数
copyreg 模块定义了在酸洗或复制时通过酸洗特定对象使用的函数。该模块提供有关不是类的对象构造函数(可能是工厂函数或类实例)的配置信息。
copyreg.constructor(对象)
此函数用于将对象声明为有效的构造函数。如果对象不可调用,则该对象不被视为有效的构造函数。如果对象不可调用,则此函数引发 TypeError。
copyreg.pickle(类型,函数,构造函数=无)
这用于将函数声明为类型类型对象的“归约”函数。函数应返回包含两个或三个元素的字符串或元组。
构造函数参数是可选的。它是一个可调用对象,可用于在酸洗时使用函数返回的参数元组调用时重建对象。如果 object 是类或构造函数不可调用,则会引发 TypeError。
例子 :
# Python 3 program to illustrate
# use of copyreg module
import copyreg, copy, pickle
class B(object):
def __init__(self, a):
self.a = a
def pickle_b(b):
print("pickling a C instance...")
return C, (b.a, )
copyreg.pickle(B, pickle_b)
b = B(1)
d = copy.copy(b)
print (d)
r = pickle.dumps(b)
print (r)
输出 :
pickling a C instance...
pickling a C instance...
b'\x80\x03c__main__\nC\nq\x00K\x01\x85q\x01Rq\x02.'