クラスとインスタンス メソッドのニュアンスの詳細: Beyond Self vs. Cls
Python Enhancement Proposal (PEP) 8 は、次の使用を提案しています。インスタンス メソッドの最初の引数として "self" を指定し、クラス メソッドの最初の引数として "cls" を指定します。この区別は、これらのメソッドがインスタンスとクラスを操作する際に果たす役割の違いから生じています。
インスタンス メソッド: 自己利点
インスタンス メソッドは、インスタンスで呼び出されます。クラス。これらは通常、その特定のインスタンスの特定の属性や動作と対話します。これらのメソッドの最初のパラメータは self で、メソッドが呼び出されるインスタンスを表します。
たとえば、次のクラスは「introduce」インスタンス メソッドを定義します。
<code class="python">class Inst: def __init__(self, name): self.name = name def introduce(self): print("Hello, I am %s, and my name is %s" % (self, self.name))</code>
Inst クラスのインスタンスを作成し、その "introduce" メソッドを呼び出すと、インスタンス自体が self パラメーターとして渡され、その属性 (この場合は "name" 属性) にアクセスできるようになります。
クラス メソッド: Cls の採用
一方、クラス メソッドは、個々のインスタンスではなくクラス自体を操作します。これらを使用すると、クラスの構造や動作を変更したり検査したりできます。これらのメソッドの最初のパラメータは cls で、メソッドが呼び出されるクラスを表します。
次の例はクラス メソッドを示しています。
<code class="python">class Cls: @classmethod def introduce(cls): print("Hello, I am %s!" % cls)</code>
このメソッドは必要ありません特定のオブジェクト属性と対話しないため、インスタンスとなります。代わりに、クラス自体を操作し、その構造に関する情報を提供します。
クラス メソッドは、子クラスが親クラスの動作を変更または拡張できるため、親クラスから継承する場合に特に役立ちます。たとえば、次のサブクラスは Cls クラスの "introduce" メソッドをオーバーライドします。
<code class="python">class SubCls(Cls): pass SubCls.introduce() # outputs: Hello, I am <class 'SubCls'></code>
最初のパラメータとして "cls" を使用すると、"introduce" メソッドをサブクラスで直接呼び出すことができ、親クラスから継承されたプロパティにアクセスしながら、独自の動作を定義します。
以上がPython のインスタンス メソッドとクラス メソッド: 「self」と「cls」はいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。