1. ホーム
  2. パイソン

[解決済み】Pythonのメソッドで明示的に "self "引数が必要な理由とは?

2022-04-10 08:42:44

質問

Pythonでクラスに対してメソッドを定義する場合、以下のようになります。

class MyClass(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

しかし、C#など他の言語では、メソッドプロトタイプで引数として宣言しなくても、"this"キーワードでメソッドがバインドされているオブジェクトの参照を持っているものもあるのです。

これはPythonの意図的な言語設計上の決定なのでしょうか、それとも引数として"self"を渡す必要がある実装上の詳細があるのでしょうか。

どのように解決するのですか?

PetersのZen of Pythonを引用します。

JavaやC++では、' this. を推論することができます。ただし、推論できないような変数名がある場合は例外です。 つまり、必要なときと不要なときがあるわけです。

Pythonはこのようなことをルールに基づいて行うのではなく、明示的に行うことを選択しています。

さらに、何も暗示または仮定していないので、実装の一部が公開されます。 self.__class__ , self.__dict__ といった内部構造も明白に利用できます。