Die Unterschiede zwischen @staticmethod- und @classmethod-Dekoratoren in Python verstehen
Mit den @staticmethod- und @classmethod-Dekoratoren in Python können Sie Klassen erstellen -Methoden mit unterschiedlichem Verhalten. Hier ist eine detaillierte Erklärung ihrer wichtigsten Unterschiede:
Aufrufkonventionen:
-
@staticmethod: Statische Methoden sind nicht an bestimmte Bedingungen gebunden Instanz oder Klasse. Sie verhalten sich wie reguläre Funktionen, die sowohl von Instanzen als auch von Klassen direkt aufgerufen werden können.
-
@classmethod: Klassenmethoden sind an die Klasse selbst und nicht an eine bestimmte Instanz gebunden. Sie werden normalerweise verwendet, um Operationen an der Klasse selbst durchzuführen, wie zum Beispiel das Ändern von Attributen oder das Erstellen alternativer Konstruktoren.
Methodensignaturen:
- Statische Methoden Empfangen Sie die Klasse oder Instanz nicht als implizites erstes Argument.
- Klassenmethoden empfangen die Klasse als erstes implizites Argument.
- Instanzmethoden (Methoden ohne Dekoratoren) erhalten die Instanz als erstes implizites Argument.
Instantiierung:
- Statische Methoden können aufgerufen werden, ohne eine Instanz der Klasse zu erstellen.
- Klassenmethoden können sowohl von Instanzen als auch aufgerufen werden Klassen.
- Instanzmethoden können nur von Instanzen der Klasse aufgerufen werden.
Praktisches Beispiel:
Bedenken Sie den folgenden Codeausschnitt:
class A(object):
def foo(self, x):
print("executing foo({self}, {x})")
@classmethod
def class_foo(cls, x):
print("executing class_foo({cls}, {x})")
@staticmethod
def static_foo(x):
print("executing static_foo({x})")
a = A()
Nach dem Login kopieren
Beim Aufruf von foo wird die Instanz a implizit als erste übergeben Argument:
a.foo(1)
# executing foo(<__main__.A object at 0xb7dbef0c>, 1)
Nach dem Login kopieren
Bei Klassenmethoden wird implizit die Klasse der Instanz statt self übergeben:
a.class_foo(1)
# executing class_foo(<class '__main__.A'>, 1)
Nach dem Login kopieren
Statische Methoden erhalten keine impliziten Argumente:
a.static_foo(1)
# executing static_foo(1)
Nach dem Login kopieren
Zusammenfassung:
-
@staticmethod Dekoratoren erstellen Methoden, die sich wie reguläre Funktionen verhalten, ohne implizite Klasse oder Instanzbindung.
-
@classmethod Dekorateure erstellen gebundene Methoden auf die Klasse selbst, sodass sie Klassenattribute ändern oder alternative Konstruktoren erstellen können.
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen „@staticmethod' und „@classmethod' in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!