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

bal*_*lki 24 python python-2.7

我想传递类似于成员函数指针的东西.我尝试了以下内容.

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')
Run Code Online (Sandbox Code Playgroud)

预期的产出是 hello Bala

phi*_*hag 25

dummy.func1未绑定的,因此只需要一个明确的self参数:

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

greet(dummy.func1,'Bala')
Run Code Online (Sandbox Code Playgroud)


jtp*_*yda 6

由于dummy是类名,因此dummy.fun1是未绑定的.

正如phihag所说,你使用dummy绑定方法的实例:

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

greet(dummy.func1, 'Bala')
Run Code Online (Sandbox Code Playgroud)

或者,您可以dummy在以下范围之外实例化greet:

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

my_dummy = dummy()

greet(my_dummy.func, 'Bala')
Run Code Online (Sandbox Code Playgroud)

你也可以使用functools.partial:

from functools import partial

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

my_dummy = dummy()

greet(partial(dummy.func1, my_dummy), 'Bala')
Run Code Online (Sandbox Code Playgroud)