Vgrajena funkcija staticmethod () vrne statično metodo za dano funkcijo.
Sintaksa staticmethod()
je:
statična metoda (funkcija)
Uporaba staticmethod()
velja za ne-pitonski način ustvarjanja statične funkcije.
Zato lahko v novejših različicah Pythona uporabite @staticmethod
dekorater.
Sintaksa @staticmethod
je:
@staticmethod def func (argumenti, …)
parametri staticmethod ()
staticmethod()
Postopek traja samo en parameter:
- function - funkcija, ki jo je treba pretvoriti v statično metodo
Vrnjena vrednost iz staticmethod ()
Se staticmethod()
vrne statična metoda za funkcijo sprejel kot parameter.
Kaj je statična metoda?
Statične metode, podobno kot metode razredov, so metode, ki so vezane na razred in ne na njegov objekt.
Ne zahtevajo izdelave primerka razreda. Torej niso odvisni od stanja predmeta.
Razlika med statično metodo in metodo razreda je:
- Statična metoda o razredu ne ve ničesar in se ukvarja samo s parametri.
- Metoda razreda deluje z razredom, saj je njegov parameter vedno razred sam.
Lahko jih pokliče tako razred kot njegov objekt.
Class.staticmethodFunc () ali celo Class (). StaticmethodFunc ()
Primer 1: Ustvarite statično metodo z uporabo 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))
Izhod
Vsota je: 15
Kdaj uporabljate statične metode?
1. Združevanje funkcije pripomočka v razred
Statične metode imajo omejen primer uporabe, saj tako kot metode razredov ali katere koli druge metode znotraj razreda ne morejo dostopati do lastnosti samega razreda.
Kadar pa potrebujete pomožno funkcijo, ki ne dostopa do nobenih lastnosti razreda, vendar je smiselno, da pripada razredu, uporabimo statične funkcije.
Primer 2: Ustvarite funkcijo pomožnega programa kot statično metodo
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")
Izhod
Enako
Tu imamo Dates
razred, ki deluje samo z datumi s pomišljaji. Vendar so bili v naši prejšnji zbirki podatkov vsi datumi v poševnicah.
Za pretvorbo poševnih datumov v pomišljajne datume smo toDashDate
znotraj ustvarili funkcijo pripomočka Dates
.
Je statična metoda, ker ji ni treba dostopati do lastnih lastnosti Dates
in zahteva samo parametre.
Ustvarjamo lahko tudi toDashDate
zunaj predavanja, a ker deluje samo za datume, je logično, da ga obdržimo v Dates
razredu.
2. Z enim samim izvajanjem
Statične metode se uporabljajo, kadar ne želimo, da podrazredi razreda spremenijo / preglasijo določeno izvedbo metode.
3. primer: Kako dedovanje deluje s statično metodo?
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")
Izhod
Enako
Tu ne bi želeli, da podrazred DatesWithSlashes
preglasi metodo statične uporabnosti, toDashDate
ker ima samo enkratno uporabo, tj. Spremeni datum v pomišljaj.
Z lahkoto bi lahko uporabili statično metodo s preglasitvijo getDate()
metode v podrazredu, tako da deluje dobro z DatesWithSlashes
razredom.