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 @staticmethod
Dekorator verwenden.
Die Syntax von @staticmethod
lautet:
@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 Dates
Klasse, 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 toDashDate
innerhalb Dates
.
Es ist eine statische Methode, da sie nicht auf eigene Eigenschaften zugreifen Dates
muss und nur die Parameter benötigt.
Wir können auch toDashDate
außerhalb der Klasse erstellen , aber da es nur für Datumsangaben funktioniert, ist es logisch, es innerhalb der Dates
Klasse 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 DatesWithSlashes
die statische Dienstprogrammmethode überschreibt, toDashDate
da 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 DatesWithSlashes
Klasse funktioniert .