27

重複の可能性:
Pythonメソッドに「self」引数を明示的に含める必要があるのはなぜですか?

自己が常にクラスメソッドの最初の引数である理由を理解しています。これは完全に理にかなっていますが、常にそうである場合は、すべてのメソッド定義で入力する手間がかかるのはなぜですか。舞台裏で自動的に行われるものにしてみませんか?

明確にするためですか、それとも最初の議論として自分自身を渡したくない状況がありますか?

4

2 に答える 2

36

明示的は暗黙的よりも優れているからです。パラメータを明示的な要件にすることで、コードの理解、内省、および操作を簡素化できます。PythonFAQでさらに詳しく説明されています。

さらに、クラスメソッドを定義でき(最初の引数としてインスタンスの代わりにクラスを使用)、静的メソッドを定義できます(「最初の」引数をまったく使用しないでください)。

class Foo(object):
    def aninstancemethod(self):
        pass

    @classmethod
    def aclassmethod(cls):
        pass

    @staticmethod
    def astaticmethod():
        pass
于 2012-10-14T12:44:07.763 に答える
17

Guidoはここでそれを説明しました。基本的に、メソッドは関数であり、関数は「隠された」パラメーターを受け入れてはなりません。そうしないと、デコレーターなどの高階関数が適切な方法でそれらを処理できなくなります。

于 2012-10-14T12:46:23.770 に答える