Ответ 1
dummy.func1
unbound, и поэтому просто принимает явный аргумент self
:
def greet(f,name):
d = dummy()
f(d, name)
greet(dummy.func1,'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
unbound, и поэтому просто принимает явный аргумент self
:
def greet(f,name):
d = dummy()
f(d, name)
greet(dummy.func1,'Bala')
Так как 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')
Вы можете использовать что-то вроде этого:
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')
и это отлично работает: в кодексе