Обратный вызов Python, работающий с функциями, но не с методами - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть сторонняя библиотека 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 Ответ

1 голос
/ 20 декабря 2011

Сорин сам выяснил это, с помощью моего комментария, но он указал, что хочет, чтобы я опубликовал исходный комментарий в качестве ответа. Я не хотел публиковать это изначально, потому что я не уверен в точном поведении кода setCallback и callbackFunction; используйте на свой страх и риск и вносите изменения в зависимости от причины.

Лучший способ обернуть функцию - это использовать functools.partial:

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

Вы также можете использовать lambda (но вы потеряете очки стиля с питонистами):

setCallback(lambda param, data: myObj.callbackFunction(param, data), param="x")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...