Ugrađena funkcija staticmethod () vraća statičku metodu za zadanu funkciju.
Sintaksa staticmethod()
je:
statička metoda (funkcija)
Korištenje staticmethod()
se smatra nepitonskim načinom stvaranja statičke funkcije.
Stoga, u novijim verzijama Pythona, možete koristiti @staticmethod
uređivač.
Sintaksa @staticmethod
je:
@staticmethod def func (argumenti, …)
parametri staticmethod ()
staticmethod()
Postupak traje jedan parametar:
- funkcija - funkcija koju treba pretvoriti u statičku metodu
Vrati vrijednost iz staticmethod ()
U staticmethod()
vraća statička metoda za funkciju prošao kao parametar.
Što je statička metoda?
Statičke metode, slično kao metode klase, metode su koje su vezane za klasu, a ne za njezin objekt.
Ne trebaju stvaranje instance klase. Dakle, oni ne ovise o stanju predmeta.
Razlika između statičke metode i metode klase je:
- Statička metoda ne zna ništa o klasi i samo se bavi parametrima.
- Metoda klase radi s klasom jer je njezin parametar uvijek sama klasa.
Može ih pozvati i klasa i njezin objekt.
Class.staticmethodFunc () ili čak Class (). StaticmethodFunc ()
Primjer 1: Stvorite statičku metodu koristeći 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))
Izlaz
Zbroj je: 15
Kada koristite statičke metode?
1. Grupiranje funkcije korisnosti u klasu
Statičke metode imaju ograničen slučaj upotrebe jer, poput metoda klase ili bilo kojih drugih metoda unutar klase, ne mogu pristupiti svojstvima same klase.
Međutim, kada vam je potrebna uslužna funkcija koja ne pristupa nijednom svojstvu klase, ali ima smisla da pripada klasi, koristimo statičke funkcije.
Primjer 2: Stvorite uslužnu funkciju kao statičku metodu
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")
Izlaz
Jednak
Ovdje imamo Dates
nastavu koja radi samo s datumima s crticama. Međutim, u našoj prethodnoj bazi podataka svi su datumi bili prisutni u kosim crtama.
Kako bismo pretvorili kose datume u crtice, stvorili smo uslužnu funkciju toDashDate
unutar Dates
.
To je statična metoda jer ne treba pristupiti niti jednom svojstvu Dates
, već zahtijeva samo parametre.
Možemo stvarati i toDashDate
izvan klase, ali budući da radi samo za datume, logično je zadržati je u Dates
klasi.
2. Imati jednu implementaciju
Statičke metode koriste se kada ne želimo da podrazredi klase mijenjaju / nadjačavaju određenu implementaciju metode.
Primjer 3: Kako nasljeđivanje funkcionira statičkom metodom?
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")
Izlaz
Jednak
Ovdje ne bismo željeli da podrazred DatesWithSlashes
nadjača statičku uslužnu metodu toDashDate
jer ima samo jednu upotrebu, tj. Promjenu datuma u crtice.
Mogli bismo lako koristiti statičku metodu u svoju korist nadjačavanjem getDate()
metode u podrazredu tako da dobro radi s DatesWithSlashes
klasom.