【问题标题】:How to pass member function as argument in python?如何在python中将成员函数作为参数传递?
【发布时间】:2012-04-28 05:10:03
【问题描述】:

我想传递类似于成员函数指针的东西。我尝试了以下方法。

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

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    dummy.func1unbound,因此只需要一个显式的self 参数:

    def greet(f,name):
        d = dummy()
        f(d, name)
    
    greet(dummy.func1,'Bala')
    

    【讨论】:

    • 谢谢。顺便说一句,什么是未绑定方法?
    • 这是一个没有关联对象的方法。更多信息请参考this stackoverflow question
    【解决方案2】:

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

      而且效果很好:on codepad

      【讨论】:

      • 是的,这行得通,但我想做的是将成员函数也作为参数传递。即greet(dummy.func2,'Bala') 也应该工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 2019-09-27
      • 1970-01-01
      • 2018-09-18
      相关资源
      最近更新 更多