Heim > Backend-Entwicklung > Python-Tutorial > Was ist der Unterschied zwischen „@staticmethod' und „@classmethod' in Python?

Was ist der Unterschied zwischen „@staticmethod' und „@classmethod' in Python?

Barbara Streisand
Freigeben: 2024-12-17 01:08:25
Original
709 Leute haben es durchsucht

What's the Difference Between `@staticmethod` and `@classmethod` in Python?

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage