self は「自分自身」を意味し、Python ではクラスではなくクラスのインスタンスを表します。 Self はクラス メソッド内でのみ見つかります。独立した関数またはメソッドには self が必要ありません。クラス メソッドを定義するときに self が存在する必要があります。 self という名前は必須ではなく、a または b またはその他の名前として定義できますが、慣例的であり、理解の難しさを軽減できます。
まず、Python クラスで self という単語が使用される理由を理解する必要があります。なぜ「zhangsan」や「lisi」などの名前を使用しないのでしょうか。これには彼の意図があるに違いない。
self はクラスではなく、クラスのインスタンスを表します。
class Test: def prt(self): print(self) print(self.__class__) t = Test() t.prt()
実行結果は次のとおりです。
<__main__.Test object at 0x000000000284E080> <class '__main__.Test'>
上記の例から、self がクラスのインスタンスを表すことは明らかです。そして self.class はクラスを指します。
クラス内のメソッドの最初のパラメーターは self である必要があります。そうしないと、インスタンスはクラス内のメソッドを正しく呼び出すことができません。つまり、メソッドの最初のパラメーターが self でない場合 (広義には)センス)の場合、このメソッドはインスタンスが呼び出せないため値がありません。呼び出せないメソッドが何の役に立つのかわかりません。
注: self をこれに置き換えると、結果は同じになりますが、Python では従来の self を使用するのが最善です。
継承する場合、渡されるインスタンスはselfが定義されているクラスのインスタンスではなく、渡されたインスタンスになります。
class Parent: def pprt(self): print(self) class Child(Parent): def cprt(self): print(self) c = Child() c.cprt() c.pprt() p = Parent() p.pprt()
実行結果は次のとおりです:
<__main__.Child object at 0x0000000002A47080> <__main__.Child object at 0x0000000002A47080> <__main__.Parent object at 0x0000000002A47240>
説明:
インスタンスを参照する c.cprt() の実行時に理解に問題はありません。チャイルドクラスの。
しかし、c.pprt() を実行すると、Child.pprt(c) と同等になるため、self は依然として Child クラスのインスタンスを参照します。pprt() メソッドは self 内で定義されていないため、継承は引き継がれます。 ツリーを調べると、親クラス Parent に pprt() メソッドが定義されていることがわかり、正常に呼び出されます。
以上がPython 自己 それはどういう意味ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。