Python staticmethod ()

Die integrierte Funktion staticmethod () gibt eine statische Methode für eine bestimmte Funktion zurück.

Die Syntax von staticmethod()lautet:

 statische Methode (Funktion)

Die Verwendung staticmethod()wird als unpythonische Methode zum Erstellen einer statischen Funktion angesehen.

Daher können Sie in neueren Versionen von Python den @staticmethodDekorator verwenden.

Die Syntax von @staticmethodlautet:

 @staticmethod def func (args,…)

staticmethod () Parameter

Die staticmethod()Methode verwendet einen einzelnen Parameter:

  • Funktion - Funktion, die in eine statische Methode konvertiert werden muss

Rückgabewert von staticmethod ()

Das staticmethod()gibt eine statische Methode für eine als Parameter übergebene Funktion zurück.

Was ist eine statische Methode?

Statische Methoden sind ähnlich wie Klassenmethoden Methoden, die an eine Klasse und nicht an ihr Objekt gebunden sind.

Sie erfordern keine Klasseninstanzerstellung. Sie sind also nicht vom Zustand des Objekts abhängig.

Der Unterschied zwischen einer statischen Methode und einer Klassenmethode ist:

  • Die statische Methode weiß nichts über die Klasse und befasst sich nur mit den Parametern.
  • Die Klassenmethode arbeitet mit der Klasse, da ihr Parameter immer die Klasse selbst ist.

Sie können sowohl von der Klasse als auch von ihrem Objekt aufgerufen werden.

 Class.staticmethodFunc () oder sogar Class (). StaticmethodFunc ()

Beispiel 1: Erstellen Sie eine statische Methode mit staticmethod ()

 class Mathematics: def addNumbers(x, y): return x + y # create addNumbers static method Mathematics.addNumbers = staticmethod(Mathematics.addNumbers) print('The sum is:', Mathematics.addNumbers(5, 10))

Ausgabe

 Die Summe ist: 15 

Wann verwenden Sie statische Methoden?

1. Gruppieren der Dienstprogrammfunktion zu einer Klasse

Statische Methoden haben einen begrenzten Anwendungsfall, da sie wie Klassenmethoden oder andere Methoden innerhalb einer Klasse nicht auf die Eigenschaften der Klasse selbst zugreifen können.

Wenn Sie jedoch eine Dienstprogrammfunktion benötigen, die nicht auf Eigenschaften einer Klasse zugreift, aber Sinn macht, dass sie zur Klasse gehört, verwenden wir statische Funktionen.

Beispiel 2: Erstellen Sie eine Dienstprogrammfunktion als statische Methode

 class Dates: def __init__(self, date): self.date = date def getDate(self): return self.date @staticmethod def toDashDate(date): return date.replace("/", "-") date = Dates("15-12-2016") dateFromDB = "15/12/2016" dateWithDash = Dates.toDashDate(dateFromDB) if(date.getDate() == dateWithDash): print("Equal") else: print("Unequal")

Ausgabe

 Gleich

Hier haben wir eine DatesKlasse, die nur mit Datumsangaben mit Bindestrichen funktioniert. In unserer vorherigen Datenbank waren jedoch alle Daten in Schrägstrichen enthalten.

Um die Schrägstrich-Daten strichDaten zu konvertieren, haben wir eine Nutzenfunktion erstellt toDashDateinnerhalb Dates.

Es ist eine statische Methode, da sie nicht auf eigene Eigenschaften zugreifen Datesmuss und nur die Parameter benötigt.

Wir können auch toDashDateaußerhalb der Klasse erstellen , aber da es nur für Datumsangaben funktioniert, ist es logisch, es innerhalb der DatesKlasse zu belassen .

2. Eine einzige Implementierung haben

Statische Methoden werden verwendet, wenn keine Unterklassen einer Klasse eine bestimmte Implementierung einer Methode ändern / überschreiben sollen.

Beispiel 3: Wie funktioniert die Vererbung mit der statischen Methode?

 class Dates: def __init__(self, date): self.date = date def getDate(self): return self.date @staticmethod def toDashDate(date): return date.replace("/", "-") class DatesWithSlashes(Dates): def getDate(self): return Dates.toDashDate(self.date) date = Dates("15-12-2016") dateFromDB = DatesWithSlashes("15/12/2016") if(date.getDate() == dateFromDB.getDate()): print("Equal") else: print("Unequal")

Ausgabe

 Gleich

Hier möchten wir nicht, dass die Unterklasse DatesWithSlashesdie statische Dienstprogrammmethode überschreibt, toDashDateda sie nur eine einzige Verwendung hat, dh das Datum in Strichdaten ändern.

Wir könnten die statische Methode leicht zu unserem Vorteil nutzen, indem wir die getDate()Methode in der Unterklasse überschreiben , damit sie gut mit der DatesWithSlashesKlasse funktioniert .

Interessante Beiträge...