クラスとインスタンス メソッドのニュアンスの詳細: Beyond Self vs. Cls
Python Enhancement Proposal (PEP) 8 は、次の使用を提案しています。インスタンス メソッドの最初の引数として "self" を指定し、クラス メソッドの最初の引数として "cls" を指定します。この区別は、これらのメソッドがインスタンスとクラスを操作する際に果たす役割の違いから生じています。
インスタンス メソッド: 自己利点
インスタンス メソッドは、クラス。これらは通常、その特定のインスタンスの特定の属性や動作と対話します。これらのメソッドの最初のパラメータは self で、メソッドが呼び出されるインスタンスを表します。
たとえば、次のクラスは「introduce」インスタンス メソッドを定義します:
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))
Inst クラスのインスタンスを作成し、その "introduce" メソッドを呼び出すと、インスタンス自体が self パラメーターとして渡されるため、その属性 (この場合は「name」属性) にアクセスできるようになります。
クラス メソッド: Cls
の採用一方、クラス メソッドは、個々のインスタンスではなくクラス自体を操作します。これらを使用すると、クラスの構造や動作を変更したり検査したりできます。これらのメソッドの最初のパラメータは cls で、メソッドが呼び出されるクラスを表します。
次の例はクラス メソッドを示しています:
class Cls:
@classmethod
def introduce(cls):
print("Hello, I am %s!" % cls)
このメソッドは、特定のオブジェクト属性と対話しないため、インスタンスを必要としません。代わりに、クラス自体を操作して、その構造に関する情報を提供します。
クラス メソッドは、子クラスが親クラスの動作を変更または拡張できるため、親クラスから継承する場合に特に便利です。たとえば、次のサブクラスは、Cls クラスの「introduce」メソッドをオーバーライドします:
class SubCls(Cls):
pass
SubCls.introduce()
# outputs: Hello, I am
最初のパラメータとして「cls」を使用すると、「introduce」メソッドをサブクラスで直接呼び出すことができ、サブクラスで独自の動作を定義できるようになります。引き続き親クラスから継承されたプロパティにアクセスします。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3