如何在Python中将方法作为parameter passing
是否有可能将方法作为parameter passing给方法?
self.method2(self.method1) def method1(self): return 'hello world' def method2(self, methodToRun): result = methodToRun.call() return result
是的,就像你写的那样,使用方法的名字。 方法/函数是Python中的对象,就像其他任何东西一样,你可以把它们传递给variables。 事实上,你可以把一个方法(或函数)看作一个variables,它的值是实际的可调用代码对象。
仅供参考,没有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解释器来回答这些问题是微不足道的,对于更多的function, IPython解释器也是这样。
方法是任何其他的对象。 所以你可以把它们传递出去,把它们存储在列表和string中,随你随便做什么。 关于它们的特殊之处在于它们是可调用对象,因此您可以调用__call__
。 当调用带或不带参数的方法时, methodToRun()
被自动调用,所以你只需要编写methodToRun()
。