Как передать функцию-член в качестве аргумента в python? - программирование
Подтвердить что ты не робот

Как передать функцию-член в качестве аргумента в 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

4b9b3361

Ответ 1

dummy.func1 unbound, и поэтому просто принимает явный аргумент self:

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

greet(dummy.func1,'Bala')

Ответ 2

Так как dummy - это имя класса, dummy.fun1 несвязано.

Как сказал phihag, вы используете экземпляр dummy для привязки метода:

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

greet(dummy.func1, 'Bala')

В качестве альтернативы вы можете создать экземпляр dummy вне greet:

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

и это отлично работает: в кодексе