【发布时间】:2011-02-25 05:24:07
【问题描述】:
我想在 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 中,默认情况下也无法腌制未绑定的方法;我设法以某种我不理解的奇怪方式在那里做到了:我为 MethodType 类编写了一个带有copy_reg 模块的reducer,它涵盖了绑定和未绑定的方法。但是reducer只解决了绑定方法的情况,因为它依赖于my_method.im_self。不可思议的是,它还导致 Python 2.x 能够腌制未绑定的方法。这在 Python 3.x 上不会发生。
【问题讨论】:
标签: python methods python-3.x pickle