是否可以将方法作为参数传递给方法?
self.method2(self.method1)
def method1(self):
return 'hello world'
def method2(self, methodToRun):
result = methodToRun.call()
return result
是否可以将方法作为参数传递给方法?
self.method2(self.method1)
def method1(self):
return 'hello world'
def method2(self, methodToRun):
result = methodToRun.call()
return result
当前回答
使用lambda函数。 所以如果你没有争论,事情就变得很琐碎:
def method1():
return 'hello world'
def method2(methodToRun):
result = methodToRun()
return result
method2(method1)
但是假设你在method1中有一个(或多个)参数:
def method1(param):
return 'hello ' + str(param)
def method2(methodToRun):
result = methodToRun()
return result
然后你可以简单地调用method2作为method2(lambda: method1('world'))。
method2(lambda: method1('world'))
>>> hello world
method2(lambda: method1('reader'))
>>> hello reader
我发现这个答案比这里提到的其他答案清晰得多。
其他回答
如果你想传递一个类的方法作为参数,但还没有你要调用它的对象,你可以简单地传递对象,一旦你有它作为第一个参数(即“self”参数)。
class FooBar:
def __init__(self, prefix):
self.prefix = prefix
def foo(self, name):
print "%s %s" % (self.prefix, name)
def bar(some_method):
foobar = FooBar("Hello")
some_method(foobar, "World")
bar(FooBar.foo)
这将打印Hello World
下面是重新编写的示例,以显示一个独立的工作示例:
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()
使用lambda函数。 所以如果你没有争论,事情就变得很琐碎:
def method1():
return 'hello world'
def method2(methodToRun):
result = methodToRun()
return result
method2(method1)
但是假设你在method1中有一个(或多个)参数:
def method1(param):
return 'hello ' + str(param)
def method2(methodToRun):
result = methodToRun()
return result
然后你可以简单地调用method2作为method2(lambda: method1('world'))。
method2(lambda: method1('world'))
>>> hello world
method2(lambda: method1('reader'))
>>> hello reader
我发现这个答案比这里提到的其他答案清晰得多。
是的,函数(和方法)是Python中的第一类对象。以下工作:
def foo(f):
print "Running parameter f()."
f()
def bar():
print "In bar()."
foo(bar)
输出:
Running parameter f().
In bar().
使用Python解释器或IPython shell来回答这类问题非常简单。
是的,这是可能的。就叫它:
class Foo(object):
def method1(self):
pass
def method2(self, method):
return method()
foo = Foo()
foo.method2(foo.method1)