我遇到了一个关于pickle的问题,代码如下:
import cPickle
class A(object):
def __init__(self):
self.a = 1
def methoda(self):
print(self.a)
class B(object):
def __init__(self):
self.b = 2
a = A()
self.b_a = a.methoda
def methodb(self):
print(self.b)
if __name__ == '__main__':
b = B()
with open('best_model1.pkl', 'w') as f:
cPickle.dump(b, f)
错误信息如下:
文件 "/usr/lib/python2.7/copy_reg.py",第70行,函数_reduce_ex()中, 抛出TypeError异常,原因是无法将%base.name对象进行序列化。TypeError: 无法序列化instancemethod对象。
dill
在做什么,它只是在copyreg
中注册序列化函数。如果你想的话,你也可以这样做...基本上,注册与dill
使用相同的序列化函数,然后pickle
将像上面那样为你工作。 - Mike McKerns