メソッドにパラメータとしてメソッドを渡すことはできますか?メソッドをPythonのパラメータとして渡すには
self.method2(self.method1)
def method1(self):
return 'hello world'
def method2(self, methodToRun):
result = methodToRun.call()
return result
メソッドにパラメータとしてメソッドを渡すことはできますか?メソッドを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)
インスタンス 'foo'がない場合はどうなりますか? –
そして、あなたは、単に例えば、FOOを必要としない。: 'デフ法1(): パス デフ法2(法) 復帰方法() 法2(法1)' – Tom
はい;関数(とメソッド)は、Pythonのファーストクラスのオブジェクトです。以下の作品:
def foo(f):
print "Running parameter f()."
f()
def bar():
print "In bar()."
foo(bar)
出力:
Running parameter f().
In bar().
が質問のこれらの種類は、Pythonインタプリタを使用して答えることは些細または、より多くの機能のために、IPythonシェルです。ここで
は、スタンドアローンの実施例を示すように再書かれたあなたの例である:
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()
方法は、他のどのようなオブジェクトです。だからあなたはそれらを渡したり、リストや辞書に入れたり、好きなことをしたりすることができます。それらの特別なことは、呼び出し可能なオブジェクトなので、__call__
を呼び出すことができるということです。 __call__
は、引数の有無にかかわらずメソッドを呼び出すと自動的に呼び出されます。したがって、methodToRun()
を書くだけです。
うわー、驚くほど簡単。 –
@MattFletcher Pythonの単純さはいつも私を驚かせる(C++から来ている)。 – GHC
@David Z方法1で引数を渡すにはどうすればよいですか? – Geek