なぜselfが常にクラスメソッドの最初の引数であるのか理解しています。これは完全に理にかなっていますが、常にそうである場合は、すべてのメソッド定義に対して入力の手間がかかるのはなぜですか。 ?舞台裏で自動的に行われるものにしてみませんか?
それは明確にするためですか、それとも最初の議論として自己を渡したくない状況がありますか?
明示的は暗黙的よりも優れているからです。パラメータを明示的な要件にすることで、コードの理解、内省、および操作を簡素化できます。 Python FAQ でさらに拡張されています。
さらに、クラスメソッドを定義でき(インスタンスの代わりにクラスを最初の引数として使用)、静的メソッドを定義できます(「最初の」引数をまったく使用しないでください)。
class Foo(object):
def aninstancemethod(self):
pass
@classmethod
def aclassmethod(cls):
pass
@staticmethod
def astaticmethod():
pass
Guidoは ここ と説明しました。基本的に、メソッドは関数であり、関数は「隠された」パラメーターを受け入れるべきではありません。そうしないと、デコレーターなどの高階関数がそれらを適切な方法で処理できなくなります。