Eintauchen in die Nuancen von Klassen- und Instanzmethoden: Beyond Self vs. Cls
Der Python Enhancement Proposal (PEP) 8 schlägt die Verwendung vor von „self“ als erstes Argument in Instanzmethoden und „cls“ als erstes Argument in Klassenmethoden. Diese Unterscheidung ergibt sich aus den unterschiedlichen Rollen, die diese Methoden bei der Arbeit mit Instanzen und Klassen spielen.
Instanzmethoden: Der Selbstvorteil
Instanzmethoden werden auf Instanzen von a aufgerufen Klasse. Sie interagieren typischerweise mit bestimmten Attributen und Verhaltensweisen dieser bestimmten Instanz. Der erste Parameter dieser Methoden ist self, der die Instanz darstellt, auf der die Methode aufgerufen wird.
Zum Beispiel definiert die folgende Klasse eine „Introduce“-Instanzmethode:
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))
Wenn wir eine Instanz der Inst-Klasse erstellen und ihre „introduce“-Methode aufrufen, wird die Die Instanz selbst wird als Selbstparameter übergeben, sodass wir auf ihre Attribute zugreifen können (in diesem Fall das Attribut „Name“).
Klassenmethoden: Umfassend Cls
Klassenmethoden hingegen operieren auf der Klasse selbst und nicht auf einzelnen Instanzen. Sie ermöglichen es uns, die Klassenstruktur oder das Klassenverhalten zu ändern oder zu überprüfen. Der erste Parameter dieser Methoden ist cls, der die Klasse darstellt, für die die Methode aufgerufen wird.
Das folgende Beispiel veranschaulicht eine Klassenmethode:
class Cls:
@classmethod
def introduce(cls):
print("Hello, I am %s!" % cls)
Diese Methode erfordert keine Instanz, da sie nicht mit bestimmten Objektattributen interagiert. Stattdessen operiert es auf der Klasse selbst und stellt Informationen über ihre Struktur bereit.
Klassenmethoden sind besonders nützlich, wenn von einer übergeordneten Klasse geerbt wird, da sie es der untergeordneten Klasse ermöglichen, das Verhalten der übergeordneten Klasse zu ändern oder zu erweitern. Beispielsweise überschreibt die folgende Unterklasse die „introduce“-Methode der Cls-Klasse:
class SubCls(Cls):
pass
SubCls.introduce()
# outputs: Hello, I am
Durch die Verwendung von „cls“ als erstem Parameter kann die Methode „introduce“ direkt für die Unterklasse aufgerufen werden, sodass diese ihr eigenes Verhalten definieren kann Greift weiterhin auf geerbte Eigenschaften der übergeordneten Klasse zu.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3