2009-04-01 18 views

答えて

124

はい、作成したとおり、メソッドの名前を使用します。メソッド/関数はPythonのオブジェクトで、他のものと同じように、変数のやり方を渡すことができます。実際、メソッド(または関数)については、その値が実際の呼び出し可能コードオブジェクトである変数として考えることができます。

FYI、何call方法がありません - 私はそれが__call__と呼ばれると思いますが、あなたは明示的に呼び出す必要がありません。

def method1(): 
    return 'hello world' 

def method2(methodToRun): 
    result = methodToRun() 
    return result 

method2(method1) 
+1

うわー、驚くほど簡単。 –

+1

@MattFletcher Pythonの単純さはいつも私を驚かせる(C++から来ている)。 – GHC

+0

@David Z方法1で引数を渡すにはどうすればよいですか? – Geek

22

はい、それは可能です。ちょうどそれを呼びなさい:

class Foo(object): 
    def method1(self): 
     pass 
    def method2(self, method): 
     return method() 

foo = Foo() 
foo.method2(foo.method1) 
+1

インスタンス 'foo'がない場合はどうなりますか? –

+0

そして、あなたは、単に例えば、FOOを必要としない。: 'デフ法1(): パス デフ法2(法) 復帰方法() 法2(法1)' – Tom

5

はい;関数(とメソッド)は、Pythonのファーストクラスのオブジェクトです。以下の作品:

def foo(f): 
    print "Running parameter f()." 
    f() 

def bar(): 
    print "In bar()." 

foo(bar) 

出力:

Running parameter f(). 
In bar(). 

が質問のこれらの種類は、Pythonインタプリタを使用して答えることは些細または、より多くの機能のために、IPythonシェルです。ここで

10

は、スタンドアローンの実施例を示すように再書かれたあなたの例である:

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() 
2

方法は、他のどのようなオブジェクトです。だからあなたはそれらを渡したり、リストや辞書に入れたり、好きなことをしたりすることができます。それらの特別なことは、呼び出し可能なオブジェクトなので、__call__を呼び出すことができるということです。 __call__は、引数の有無にかかわらずメソッドを呼び出すと自動的に呼び出されます。したがって、methodToRun()を書くだけです。

関連する問題