Да, просто используйте название метода, как вы написали. Методы / функции являются объектами в Python, как и все остальное, и вы можете передавать их так же, как вы делаете переменные. Фактически, вы можете думать о методе (или функции) как о переменной, значением которой является фактический вызываемый объект кода.
К вашему сведению, метода call
нет - я думаю, что он называется __call__
, но вам не нужно вызывать его явно:
def method1():
return 'hello world'
def method2(methodToRun):
result = methodToRun()
return result
method2(method1)
Если вы хотите, чтобы method1
вызывался с аргументами, то все становится немного сложнее. method2
должен быть написан с небольшим количеством информации о том, как передать аргументы в method1
, и он должен получить значения для этих аргументов откуда-то. Например, если method1
должен принимать один аргумент:
def method1(spam):
return 'hello ' + str(spam)
тогда вы могли бы написать method2
для вызова с одним передаваемым аргументом:
def method2(methodToRun, spam_value):
return methodToRun(spam_value)
или с аргументом, что он вычисляет сам себя:
def method2(methodToRun):
spam_value = compute_some_value()
return methodToRun(spam_value)
Вы можете расширить это на другие комбинации значений, переданных и вычисленных значений, например,
def method1(spam, ham):
return 'hello ' + str(spam) + ' and ' + str(ham)
def method2(methodToRun, ham_value):
spam_value = compute_some_value()
return methodToRun(spam_value, ham_value)
или даже с аргументами ключевых слов
def method2(methodToRun, ham_value):
spam_value = compute_some_value()
return methodToRun(spam_value, ham=ham_value)
Если вы не знаете, при написании method2
, какие аргументы будет принимать methodToRun
, вы также можете использовать распаковку аргумента для его вызова в общем виде:
def method1(spam, ham):
return 'hello ' + str(spam) + ' and ' + str(ham)
def method2(methodToRun, positional_arguments, keyword_arguments):
return methodToRun(*positional_arguments, **keyword_arguments)
method2(method1, ['spam'], {'ham': 'ham'})
В этом случае positional_arguments
должен быть списком или кортежем или аналогичным, а keyword_arguments
является диктатом или аналогичным. В method2
вы можете изменить positional_arguments
и keyword_arguments
(например, чтобы добавить или удалить определенные аргументы или изменить значения) перед вызовом method1
.