Как передать метод в качестве параметра в Python

Можно ли передать метод в качестве параметра методу?

self.method2(self.method1) def method1(self): return 'hello world' def method2(self, methodToRun): result = methodToRun.call() return result 

Да, просто используйте имя метода, как вы написали. Методы / функции – это объекты в Python, как и все остальное, и вы можете передавать их так, как вы делаете переменные. Фактически, вы можете думать о методе (или функции) как переменной, значением которой является фактический вызываемый объект кода.

FYI, нет метода call – я думаю, что он называется __call__ , но вы не должны его явно вызывать:

 def method1(): return 'hello world' def method2(methodToRun): result = methodToRun() return result method2(method1) 

Да, это возможно. Просто позвоните:

 class Foo(object): def method1(self): pass def method2(self, method): return method() foo = Foo() foo.method2(foo.method1) 

Вот ваш пример, переписанный, чтобы показать отдельный рабочий пример:

 class Test: def method1(self): return 'hello world' def method2(self, methodToRun): result = methodToRun() return result def method3(self): return self.method2(self.method1) test = Test() print test.method3() 

Да; Функции (и методы) являются объектами первого класса в Python. Следующие работы:

 def foo(f): print "Running parameter f()." f() def bar(): print "In bar()." foo(bar) 

Выходы:

 Running parameter f(). In bar(). 

Такие вопросы тривиальны для ответа с использованием интерпретатора Python или для дополнительных возможностей оболочки IPython .

Методы – это объекты, подобные любым другим. Таким образом, вы можете передавать их, хранить в списках и диктофонах, делать с ними все, что вам нравится. Особая вещь о них – это вызываемые объекты, поэтому вы можете вызвать __call__ на них. __call__ автоматически вызывается при вызове метода с аргументами или без них, поэтому вам просто нужно написать methodToRun() .