2011-12-19 7 views
0

後で呼び出すコールバック関数を登録できるサードパーティのPythonライブラリがあります。関数ではなくメソッドで動作する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 
+6

Iドンもっと情報なしで正確な答えを与えることはできますが、ラムダ式や 'functools.partial'をラップしてメソッド呼び出しを関数に変換することを考えましたか? – HardlyKnowEm

+0

'functools.partial'を調べるのにmlefavorが勧めたのは2番目です。 – PaulMcG

答えて

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") 
関連する問題