16

Pythonでは、メソッドを実装することでインスタンスを呼び出し可能にすることができます__call__。例えば

class Blah:
    def __call__(self):
        print "hello"

obj = Blah()
obj()

ただし、「run」などの独自のメソッドを実装することもできます。

class Blah:
    def run(self):
        print "hello"

obj = Blah()
obj.run()

いつ実装する必要があります__call__か?

4

1 に答える 1

19

これは答えにくい。__call__私の意見では、実際の目標が関数を作成することでない限り、定義するべきではありません。従来のオブジェクトを作成した後に行うことではありません。

言い換えれば、「オブジェクトを作成しよう」と考え始めた場合、決して を実装するべきではありません__call__。一方、「関数を作成するつもりですが、オブジェクトフレームワークを使用して関数に何らかの状態を持たせたい」と考え始めた場合は、次のように関数をオブジェクトとして作成できます__call__関数のように振る舞うように定義します。

@Paul Mantaが質問へのコメントで提供した最後のアドバイスを1つ含めたいと思います。彼は次のように書いています。

が必要かどうかわからない場合は__call__、必要ありません__call__

的確なアドバイスだと思います。

于 2012-04-23T20:45:29.917 に答える