在Python 3酸洗未绑定的方法

我想咸菜在Python 3.x的未绑定方法 我得到这个错误:

>>> class A: ... def m(self): ... pass >>> import pickle >>> pickle.dumps(Am) Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> pickle.dumps(Am) 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类,其中包括绑定和非绑定方法模块。 但减速不仅解决了绑定的方法的情况下,因为它依赖于my_method.im_self 神秘,它也引起的Python 2.x升级到能够腌制非绑定方法。 这不会发生在Python的3​​.x的

--------------解决方案-------------

这不能直接完成,因为在Python 3未绑定方法类型消失:它只是一个函数:

>>> print (type (Am))
<class 'function'>

Python函数没有绑定到一类,所以它是不可能告诉什么课Am属于只看该表达式的结果。

根据究竟你需要,酸洗/取储存的(类,方法名)元组可能是不够好:

>>> print (pickle.loads (pickle.dumps ((A, 'm'))))
... (<class '__main__.A'>, 'm')

你可以得到的方法(函数),从这里只需使用getattr()

>>> cls, method = pickle.loads (pickle.dumps ((A, 'm')))
>>> print (getattr (cls, method))
... <function m at 0xb78878ec>

分类:蟒蛇 时间:2015-03-15 人气:4
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.315 (s). 10 q(s)