如何在Python中将成员函数作为参数传递?

30

我想传递类成员函数指针,我尝试了以下方法。

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

3个回答

30

dummy.func1未绑定的,因此只需要显式传递self参数:

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

greet(dummy.func1,'Bala')

1
谢谢。顺便问一下,什么是未绑定方法? - balki
1
这是一种没有与之关联的对象的方法。有关更多信息,请参阅此stackoverflow问题 - phihag

10

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

-3
你可以像这样使用:
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 上


1
是的,这个方法可行,但我想做的是将成员函数作为参数传递。也就是说,greet(dummy.func2,'Bala') 也应该可以工作。 - balki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接