2012-04-16 150 views
17

我想傳遞類似於成員函數指針的東西。我嘗試了以下。如何在python中將成員函數作爲參數傳遞?

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

回答

19

dummy.func1unbound,因此只是需要一個明確的self說法:

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

greet(dummy.func1,'Bala') 
+1

謝謝。順便說一下,什麼是未綁定的方法? – balki 2012-04-16 20:52:56

+1

這是一種沒有與之關聯的對象的方法。欲瞭解更多信息,請參考[這個stackoverflow問題](http://stackoverflow.com/questions/114214/class-method-differences-in-python-bound-unbound-and-static) – phihag 2012-04-16 20:54:22

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') 

和這個工程pe缺點:on codepad

+1

是的,這是可行的,但我是什麼試圖做的是將成員函數也作爲參數傳遞。即greet(dummy.func2,'Bala')'也應該起作用 – balki 2012-04-16 20:55:33

5

既然dummy是類名稱,dummy.fun1是未綁定的。

正如phihag說,您使用的dummy實例綁定的方法:

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

greet(dummy.func1, 'Bala') 

或者,你可以實例化的greetdummy外:

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') 
相關問題