Funkcja wbudowana staticmethod () zwraca statyczną metodę dla danej funkcji.
Składnia staticmethod()
to:
staticmethod (funkcja)
Używanie staticmethod()
jest uważane za nie-Pythonowy sposób tworzenia funkcji statycznej.
Dlatego w nowszych wersjach Pythona można używać @staticmethod
dekoratora.
Składnia @staticmethod
to:
@staticmethod def func (args,…)
staticmethod () Parametry
staticmethod()
Sposób przyjmuje jeden parametr:
- funkcja - funkcja, którą należy przekonwertować na metodę statyczną
Wartość zwracana z staticmethod ()
Te staticmethod()
powroty metodą statyczną dla funkcji przekazywane jako parametru.
Co to jest metoda statyczna?
Metody statyczne, podobnie jak metody klasowe, są metodami powiązanymi z klasą, a nie z jej obiektem.
Nie wymagają tworzenia instancji klasy. Nie są więc zależne od stanu obiektu.
Różnica między metodą statyczną a klasową jest następująca:
- Metoda statyczna nic nie wie o klasie i zajmuje się tylko parametrami.
- Metoda class działa z klasą, ponieważ jej parametrem jest zawsze sama klasa.
Mogą być wywoływane zarówno przez klasę, jak i przez jej obiekt.
Class.staticmethodFunc () lub nawet Class (). StaticmethodFunc ()
Przykład 1: Tworzenie metody statycznej za pomocą 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))
Wynik
Suma wynosi: 15
Kiedy używasz metod statycznych?
1. Grupowanie funkcji użyteczności w klasę
Metody statyczne mają ograniczony przypadek użycia, ponieważ podobnie jak metody klas lub inne metody w klasie nie mogą uzyskać dostępu do właściwości samej klasy.
Jednak gdy potrzebujesz funkcji narzędzia, która nie ma dostępu do żadnych właściwości klasy, ale ma sens, że należy do klasy, używamy funkcji statycznych.
Przykład 2: Utwórz funkcję narzędzia jako metodę statyczną
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")
Wynik
Równy
Tutaj mamy Dates
klasę, która działa tylko z datami z myślnikami. Jednak w naszej poprzedniej bazie danych wszystkie daty były podane w ukośnikach.
Aby przekonwertować daty ukośne na daty kreskowe, stworzyliśmy funkcję narzędzia toDashDate
w programie Dates
.
Jest to metoda statyczna, ponieważ nie potrzebuje dostępu do żadnych własnych właściwości Dates
i wymaga tylko parametrów.
Możemy również tworzyć toDashDate
poza klasą, ale ponieważ działa tylko dla dat, logiczne jest, aby trzymać je wewnątrz Dates
klasy.
2. Posiadanie jednej implementacji
Metody statyczne są używane, gdy nie chcemy, aby podklasy klasy zmieniały / przesłaniały określoną implementację metody.
Przykład 3: Jak działa dziedziczenie z metodą statyczną?
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")
Wynik
Równy
W tym przypadku nie chcielibyśmy, aby podklasa DatesWithSlashes
przesłaniała statyczną metodę narzędziową, toDashDate
ponieważ ma ona tylko jedno zastosowanie, tj. Zmienia datę na daty-kreski.
Moglibyśmy łatwo wykorzystać metodę statyczną na naszą korzyść, nadpisując getDate()
metodę w podklasie, aby dobrze działała z DatesWithSlashes
klasą.