Python staticmethod ()

Funcția încorporată staticmethod () returnează o metodă statică pentru o funcție dată.

Sintaxa lui staticmethod()este:

 metoda statică (funcție)

Utilizarea staticmethod()este considerată o modalitate ne-pitonică de a crea o funcție statică.

Prin urmare, în versiunile mai noi de Python, puteți utiliza @staticmethoddecoratorul.

Sintaxa lui @staticmethodeste:

 @staticmethod def func (args, …)

staticmethod () Parametri

staticmethod()Metoda are un singur parametru:

  • funcție - funcție care trebuie convertită într-o metodă statică

Returnează valoarea din staticmethod ()

Cele mai staticmethod()revine o metodă statică pentru o funcție a trecut ca parametru.

Ce este o metodă statică?

Metodele statice, la fel ca metodele de clasă, sunt metode care sunt legate mai degrabă de o clasă decât de obiectul ei.

Nu necesită crearea unei instanțe de clasă. Deci, nu depind de starea obiectului.

Diferența dintre o metodă statică și o metodă de clasă este:

  • Metoda statică nu știe nimic despre clasă și se ocupă doar de parametri.
  • Metoda clasei funcționează cu clasa, deoarece parametrul său este întotdeauna clasa în sine.

Ele pot fi numite atât de clasă, cât și de obiectul acesteia.

 Class.staticmethodFunc () sau chiar Class (). StaticmethodFunc ()

Exemplul 1: Creați o metodă statică utilizând 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))

Ieșire

 Suma este: 15 

Când folosiți metode statice?

1. Gruparea funcției utilitare la o clasă

Metodele statice au un caz de utilizare limitat deoarece, la fel ca metodele clasei sau orice alte metode din cadrul unei clase, nu pot accesa proprietățile clasei în sine.

Cu toate acestea, atunci când aveți nevoie de o funcție utilitară care nu accesează nici o proprietate a unei clase, dar are sens că aparține clasei, folosim funcții statice.

Exemplul 2: Creați o funcție utilitară ca metodă statică

 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")

Ieșire

 Egal

Aici avem o Datesclasă care funcționează numai cu curmale cu liniuțe. Cu toate acestea, în baza noastră de date anterioară, toate datele erau prezente în linii oblice.

Pentru a converti datele slash în dash-dates, am creat o funcție de utilitate toDashDateîn cadrul Dates.

Este o metodă statică, deoarece nu are nevoie să acceseze niciun fel de proprietăți Datesși necesită doar parametrii.

Putem crea și în toDashDateafara clasei, dar din moment ce funcționează doar pentru date, este logic să o păstrăm în cadrul Datesclasei.

2. Având o singură implementare

Metodele statice sunt folosite atunci când nu vrem ca subclasele unei clase să schimbe / să anuleze o implementare specifică a unei metode.

Exemplul 3: Cum funcționează moștenirea cu metoda statică?

 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")

Ieșire

 Egal

Aici, nu am vrea ca subclasa DatesWithSlashessă înlocuiască metoda utilității statice, toDashDatedeoarece are doar o singură utilizare, adică schimbarea datei la date de liniuță.

Am putea folosi cu ușurință metoda statică în avantajul nostru prin suprascrierea getDate()metodei din subclasă, astfel încât să funcționeze bine cu DatesWithSlashesclasa.

Articole interesante...