克服Python关于实例方法的限制

Ram*_*hum 8 python oop copy instance-method

似乎Python对实例方法有一些限制.

  1. 无法复制实例方法.
  2. 实例方法无法进行pickle.

这对我来说是有问题的,因为我在一个非常面向对象的项目中工作,我在其中引用实例方法,并且使用了深度复制和酸洗.酸洗的事情主要由多处理机制完成.

什么是解决这个问题的好方法?我对复制问题做了一些丑陋的解决方法,但我正在寻找一个更好的解决方案来解决这两个问题.

有没有人有什么建议?

更新:

我的用例:我有一个小事件系统.每个事件都有一个.action属性,指向它应该触发的函数,有时该函数是某个对象的实例方法.

Jas*_*rff 15

您可以使用这样做copy_reg.pickle.在Python 2.6中:

import copy_reg
import types

def reduce_method(m):
    return (getattr, (m.__self__, m.__func__.__name__))

copy_reg.pickle(types.MethodType, reduce_method)
Run Code Online (Sandbox Code Playgroud)

这不存储方法的代码,只是它的名称; 但这在普通情况下会正常工作.

这使酸洗和复印工作都有效!