我想在 Python 3.x 中腌制一个未绑定的方法。我收到此错误:
>>> class A:
... def m(self):
... pass
>>> import pickle
>>> pickle.dumps(A.m)
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
pickle.dumps(A.m)
File "C:\Python31\lib\pickle.py", line 1358, in dumps
Pickler(f, protocol, fix_imports=fix_imports).dump(obj)
_pickle.PicklingError: Can't pickle <class 'function'>: attribute lookup builtins.function failed
这个事情谁有经验?
注意:在 Python 2.x 中,默认情况下也无法腌制未绑定的方法;我设法以某种我不理解的奇怪方式在那里做到了:我用copy_reg
MethodType 类的模块编写了一个 reducer,它涵盖了绑定和未绑定的方法。但是reducer只解决了绑定方法的情况,因为它依赖于my_method.im_self
. 不可思议的是,它还导致 Python 2.x 能够腌制未绑定的方法。这不会发生在 Python 3.x 上。