29

メンバー関数ポインタに似たものを渡したい。以下を試してみました。

class dummy:
    def func1(self,name):
        print 'hello %s' % name
    def func2(self,name):
        print 'hi %s' % name

def greet(f,name):
    d = getSomeDummy()
    d.f(name)

greet(dummy.func1,'Bala')

期待される出力はhello Bala

4

3 に答える 3

30

dummy.func1unboundであるため、単純に明示的なself引数を取ります。

def greet(f,name):
    d = dummy()
    f(d, name)

greet(dummy.func1,'Bala')
于 2012-04-16T20:50:16.460 に答える
8

dummyはクラス名であるため、dummy.func1バインドされていません。

phihag が言ったようにdummy、メソッドをバインドするインスタンスを作成できます。

def greet(f,name):
    d = dummy()
    f(d, name)

greet(dummy.func1, 'Bala')

dummyまたは、次の外部でインスタンス化できますgreet

def greet(f,name):
    f(name)

my_dummy = dummy()

greet(my_dummy.func, 'Bala')

次を使用することもできますfunctools.partial

from functools import partial

def greet(f,name):
    f(name)

my_dummy = dummy()

greet(partial(dummy.func1, my_dummy), 'Bala')
于 2015-11-30T18:23:45.927 に答える
-1

次のようなものを使用できます。

class dummy:
  def func1(self,name):
      print 'hello %s' % name
  def func2(self,name):
      print 'hi %s' % name
def greet(name):
  d = dummy()
  d.func1(name)
greet('Bala')

これは完全に機能します:コードパッドで

于 2012-04-16T20:52:46.567 に答える