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

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

Barbara Streisand
Freigeben: 2024-12-22 10:16:46
Original
267 Leute haben es durchsucht

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

Bedeutung und Verwendung von @classmethod und @staticmethod für Anfänger

In Python sind @classmethod und @staticmethod Dekoratoren, mit denen Methoden definiert werden spezifisch Eigenschaften.

@classmethod

Eine Klassenmethode ist eine Methode, die an eine Klasse gebunden ist, nicht an eine einzelne Instanz der Klasse. Es muss eine Klasse als erstes Argument haben, die normalerweise den Namen cls hat. Konventionell werden Klassenmethoden mit den Präfixen from_ oder create_ benannt.

Wann ist @classmethod zu verwenden:

  • Wenn Sie eine Factory-Methode erstellen möchten, die a zurückgibt neue Instanz der Klasse.
  • Wenn Sie eine Methode definieren möchten, die auf der Klasse selbst und nicht auf einer Beispiel.

Beispiel:

class Date:
    def __init__(self, day, month, year):
        self.day = day
        self.month = month
        self.year = year

    @classmethod
    def from_string(cls, date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        return cls(day, month, year)
Nach dem Login kopieren

@staticmethod

Eine staticmethod ist eine Methode, die es nicht ist entweder an die Klasse oder eine Instanz gebunden. Es hat keinen Zugriff auf Instanz- oder Klassenvariablen. Statische Methoden werden normalerweise für Hilfsfunktionen verwendet, die ohne Änderung wiederverwendet werden können.

Wann ist @staticmethod zu verwenden:

  • Wenn Sie eine Funktion definieren möchten, die ausgeführt wird Einige Operationen, die jedoch nicht vom Klassen- oder Instanzstatus abhängen.
  • Wenn Sie eine Funktion erstellen möchten, die von jedem aufgerufen werden kann Kontext.

Beispiel:

class Date:
    @staticmethod
    def is_date_valid(date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        return day <= 31 and month <= 12 and year <= 3999
Nach dem Login kopieren

Unterschied zwischen @classmethod und @staticmethod

Feature @classmethod @staticmethod
Access to class Has access to the class No access to the class
Access to instance No access to instances No access to instances
Usage Factory methods, operations on the class Utility functions, independent of class or instances

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen „@classmethod' und „@staticmethod' 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