Įtaisyta funkcija „staticmethod“ () pateikia tam tikros funkcijos statinį metodą.
Sintaksė staticmethod()
yra:
staticmethod (funkcija)
Naudojimas staticmethod()
yra laikomas nepakaltinamu statinės funkcijos sukūrimo būdu.
Taigi naujesnėse „Python“ versijose galite naudoti @staticmethod
dekoratorių.
Sintaksė @staticmethod
yra:
@staticmethod def func (argumentai,…)
staticmethod () parametrai
staticmethod()
Metodas užima vieną parametrą:
- function - funkcija, kurią reikia konvertuoti į statinį metodą
Grąžinimo vertė iš staticmethod ()
Kad staticmethod()
grįžta statinis metodas funkcijos perduodamas kaip parametras.
Kas yra statinis metodas?
Statiniai metodai, panašiai kaip klasės metodai, yra metodai, susieti su klase, o ne su jos objektu.
Jiems nereikia kurti klasės egzemplioriaus. Taigi, jie nėra priklausomi nuo objekto būklės.
Statinio metodo ir klasės metodo skirtumas yra toks:
- Statinis metodas nieko nežino apie klasę ir tik nagrinėja parametrus.
- Klasės metodas veikia su klase, nes jo parametras visada yra pati klasė.
Juos gali vadinti ir klasė, ir jos objektas.
Class.staticmethodFunc () arba net Class (). StaticmethodFunc ()
1 pavyzdys: sukurkite statinį metodą naudodami 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))
Rezultatas
Suma yra: 15
Kada naudojate statinius metodus?
1. Naudingumo funkcijos grupavimas į klasę
Statiniai metodai turi ribotą naudojimo atvejį, nes, kaip ir klasės metodai ar bet kokie kiti metodai klasėje, jie negali pasiekti pačios klasės ypatybių.
Tačiau, kai jums reikia naudingosios funkcijos, kuri nepasiekia jokių klasės ypatybių, bet turi prasmę, kad ji priklauso klasei, mes naudojame statines funkcijas.
2 pavyzdys: sukurkite naudingumo funkciją kaip statinį metodą
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")
Rezultatas
Lygus
Čia mes turime Dates
klasę, kuri veikia tik su datomis su brūkšneliais. Tačiau ankstesnėje mūsų duomenų bazėje visos datos buvo nurodytos pasviruoju brūkšniu.
Siekiant konvertuoti Slash datas į baudos aikštelę datų, mes sukūrėme naudingumo funkciją toDashDate
per Dates
.
Tai yra statinis metodas, nes jam nereikia pasiekti jokių savybių Dates
ir reikalingi tik parametrai.
Mes galime kurti ir toDashDate
už klasės ribų, bet kadangi tai veikia tik datoms, logiška ją laikyti Dates
klasės viduje .
2. Vieną įgyvendinimą
Statiniai metodai naudojami, kai nenorime, kad klasės poklasiai pakeistų / nepaisytų konkretaus metodo įgyvendinimo.
3 pavyzdys: Kaip paveldėjimas veikia naudojant statinį metodą?
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")
Rezultatas
Lygus
Čia mes nenorėtume, kad poklasis DatesWithSlashes
nepaisytų statinio naudingumo metodo, toDashDate
nes jis naudojamas tik vieną kartą, ty pakeiskite datą į brūkšnio datas.
Statinį metodą galėtume lengvai panaudoti savo naudai, pakeisdami getDate()
metodą poklasyje, kad jis gerai veiktų su DatesWithSlashes
klase.