Python staticmethod ()

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ć @staticmethoddekoratora.

Składnia @staticmethodto:

 @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 Datesklasę, 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 toDashDatew programie Dates.

Jest to metoda statyczna, ponieważ nie potrzebuje dostępu do żadnych własnych właściwości Datesi wymaga tylko parametrów.

Możemy również tworzyć toDashDatepoza klasą, ale ponieważ działa tylko dla dat, logiczne jest, aby trzymać je wewnątrz Datesklasy.

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 DatesWithSlashesprzesłaniała statyczną metodę narzędziową, toDashDateponieważ 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 DatesWithSlashesklasą.

Interesujące artykuły...