可以将方法作为参数传递给方法吗?
self.method2(self.method1)
def method1(self):
return 'hello world'
def method2(self, methodToRun):
result = methodToRun.call()
return result
发布于 2009-04-01 18:09:04
是的,就像你写的那样,只需使用方法的名称即可。方法和函数是Python中的对象,就像其他任何东西一样,您可以像传递变量一样传递它们。实际上,您可以将一个方法(或函数)看作是一个变量,它的值是实际的可调用代码对象。
既然您问到了方法,我将在下面的示例中使用方法,但请注意,下面的所有内容都同样适用于函数(除了
参数)。
要调用传递的方法或函数,只需使用它所绑定的名称,就像使用方法(或函数)的常规名称一样:
def method1(self):
return 'hello world'
def method2(self, methodToRun):
result = methodToRun()
return result
obj.method2(obj.method1)
注意:我相信一个
方法确实存在,即您
可能
从技术上讲
,但是您可能永远不应该显式地这样做。
是用来实现的,而不是从你自己的代码中调用的。
如果你想
使用参数来调用,那么事情就变得有点复杂了。
必须使用一些有关如何将参数传递给
,它需要从某个地方获取这些参数的值。例如,如果
应该有一个论点:
def method1(self, spam):
return 'hello ' + str(spam)
然后你就可以写
要使用传入的一个参数调用它,请执行以下操作:
def method2(self, methodToRun, spam_value):
return methodToRun(spam_value)
或者使用它自己计算的参数:
def method2(self, methodToRun):
spam_value = compute_some_value()
return methodToRun(spam_value)
您可以将其扩展到传入值和计算值的其他组合,如
def method1(self, spam, ham):
return 'hello ' + str(spam) + ' and ' + str(ham)
def method2(self, methodToRun, ham_value):
spam_value = compute_some_value()
return methodToRun(spam_value, ham_value)
或者甚至使用关键字参数
def method2(self, methodToRun, ham_value):
spam_value = compute_some_value()
return methodToRun(spam_value, ham=ham_value)
如果你不知道,在写的时候
,什么论点
,你也可以使用参数解包来以一种通用的方式调用它:
def method1(self, spam, ham):
return 'hello ' + str(spam) + ' and ' + str(ham)
def method2(self, methodToRun, positional_arguments, keyword_arguments):
return methodToRun(*positional_arguments, **keyword_arguments)
obj.method2(obj.method1, ['spam'], {'ham': 'ham'})
在这种情况下
需要是列表或元组或类似的,并且
是一个字典或类似的。在
您可以修改
和
(例如,添加或移除某些参数或更改值),然后再调用
..。
发布于 2009-04-01 18:11:43
是的,这是可能的。就叫它:
class Foo(object):
def method1(self):
pass
def method2(self, method):
return method()
foo = Foo()
foo.method2(foo.method1)
发布于 2009-04-01 18:13:08
以下是重写的示例,以显示独立的工作示例:
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()
https://stackoverflow.com/questions/706721
复制相似问题