📜  copyreg —注册pickle支持的函数

📅  最后修改于: 2020-04-16 14:40:24             🧑  作者: Mango

copyreg模块定义了在pickle或复制pickle特定对象所使用的函数。此模块提供有关不是类的对象构造函数(可能是工厂函数或类实例)的配置信息。

copyreg.constructor(object): 此函数用于将object声明为有效的构造函数。如果对象不可调用,则该对象不被视为有效的构造函数。如果对象不可调用,则此函数引发TypeError。

copyreg.pickle(type,function,constructor = None):用于将函数声明为类型对象的“归约”函数。函数应返回包含两个或三个元素的字符串或元组。构造函数参数是可选的。它是一个可调用对象,当pickle时使用函数返回的参数元组调用时,可用于重建对象。如果object是一个类或构造函数不可调用,则会引发TypeError。
范例:

# Python 3程序说明了copyreg模块的用法
import copyreg, copy, pickle
class C(object):
    def __init__(self, a):
        self.a = a
def pickle_c(c):
    print("picklingy一个C实例...")
    return C, (c.a, )
copyreg.pickle(C, pickle_c)
c = C(1)
d = copy.copy(c)
print (d)
p = pickle.dumps(c)
print (p)

输出:

pickling一个C实例...
pickling一个C实例...
b'\x80\x03c__main__\nC\nq\x00K\x01\x85q\x01Rq\x02.'