Python回调使用函数但不使用方法

时间:2011-12-19 14:54:05

标签: python callback

我有一个第三方Python库,允许我注册稍后调用的回调函数。

虽然代码在函数中运行正常,但当我尝试传递方法失败时,回调永远不会被调用。

我无法控制第三方库(源代码不可用)。

  def old_callbackFunction(param, data):
       print data

  class MyClass():
      def callbackFunction(self, param, data):
          print data

  myObj = MyClass()
  # old_setCallback(myObj.callbackFunction, param = "x") # this would work
  setCallback(myObj.callbackFunction, param = "x") # this is never called

1 个答案:

答案 0 :(得分:1)

索林实际上在我的评论的帮助下自己想出了这一点,但他表示他希望我发布原始评论作为答案。我不愿意发布这个原因,因为我不确定setCallback和callbackFunction代码的确切行为;使用风险自负,并根据原因进行修改。

包装函数的最佳方法是使用functools.partial

from functools import partial
setCallback(partial(myObj.callbackFunction), param="x")

你也可以使用lambda(但你会丢失pythonistas的样式点):

setCallback(lambda param, data: myObj.callbackFunction(param, data), param="x")