我想在Python 3.x中对一个未绑定的方法进行pickle。我遇到了这个错误:
>>> 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中,默认情况下也无法pickle未绑定的方法;我以某种奇怪的方式在那里做到了这一点:我使用copy_reg
模块为MethodType类编写了一个reducer,它涵盖了绑定和未绑定的方法。但是reducer仅解决了绑定方法的情况,因为它依赖于my_method.im_self
。神秘地是,这也导致Python 2.x能够pickle未绑定的方法。这在Python 3.x上不会发生。
B.m = A.m
)。然后,B.m
和A.m
将相等(实际上是相同的),因此无法确定您是在B
还是在A
中查找该方法。 - user319799