我想传递类成员函数指针,我尝试了以下方法。
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
我想传递类成员函数指针,我尝试了以下方法。
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
dummy.func1
是未绑定的,因此只需要显式传递self
参数:
def greet(f,name):
d = dummy()
f(d, name)
greet(dummy.func1,'Bala')
由于 dummy
是类名,所以 dummy.func1
是无绑定的。
正如 phihag 所说,您可以创建 dummy
的实例来绑定该方法:
def greet(f,name):
d = dummy()
f(d, name)
greet(dummy.func1, 'Bala')
或者,您可以在 greet
之外实例化 dummy
:
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')
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')
而且这个完美运作:在 codepad 上
greet(dummy.func2,'Bala')
也应该可以工作。 - balki