Iebūvētā funkcija staticmethod () atgriež statisku metodi noteiktai funkcijai.
Sintakse staticmethod()
ir:
staticmetode (funkcija)
Lietošana staticmethod()
tiek uzskatīta par ne-pitonisku veidu, kā izveidot statisku funkciju.
Tādējādi jaunākās Python versijās varat izmantot @staticmethod
dekoratoru.
Sintakse @staticmethod
ir:
@staticmethod def func (args,…)
staticmethod () parametri
staticmethod()
Metode ņem vienu parametru:
- function - funkcija, kas jāpārvērš par statisku metodi
Atgriešanās vērtība no staticmethod ()
The staticmethod()
atgriežas statiska metode funkcijai nodots kā parametrs.
Kas ir statiskā metode?
Statiskās metodes, līdzīgi kā klases metodes, ir metodes, kas ir saistītas ar klasi, nevis tās objektu.
Viņiem nav nepieciešama klases instances izveide. Tātad, tie nav atkarīgi no objekta stāvokļa.
Atšķirība starp statisko metodi un klases metodi ir:
- Statiskā metode neko nezina par klasi un tikai nodarbojas ar parametriem.
- Klases metode darbojas ar klasi, jo tās parametrs vienmēr ir pati klase.
Tos var saukt gan klase, gan tās objekts.
Class.staticmethodFunc () vai pat Class (). StaticmethodFunc ()
1. piemērs: izveidojiet statisku metodi, izmantojot 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))
Rezultāts
Summa ir: 15
Kad jūs izmantojat statiskās metodes?
1. Lietderības funkcijas grupēšana klasē
Statiskām metodēm ir ierobežots izmantošanas gadījums, jo, tāpat kā klases metodes vai citas metodes klases ietvaros, tās nevar piekļūt pašas klases īpašībām.
Tomēr, kad jums ir nepieciešama utilītas funkcija, kurai nav piekļuves nevienai klases īpašībai, bet ir jēga piederēt šai klasei, mēs izmantojam statiskās funkcijas.
2. piemērs: izveidojiet utilītas funkciju kā statisku metodi
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")
Rezultāts
Vienāds
Šeit mums ir Dates
klase, kas darbojas tikai ar datumiem ar domuzīmēm. Tomēr mūsu iepriekšējā datubāzē visi datumi bija norādīti slīpsvītrās.
Lai pārvērstu slīpsvītras-datumus, lai domuzīme datumi, mēs esam izveidojuši derīguma funkciju toDashDate
ietvaros Dates
.
Tā ir statiska metode, jo tai nav jāpiekļūst nekādām Dates
pašas īpašībām, un tai nepieciešami tikai parametri.
Mēs varam izveidot arī toDashDate
ārpus klases, taču, tā kā tas darbojas tikai datumiem, ir loģiski to paturēt Dates
klases iekšienē .
2. Vienota ieviešana
Statiskās metodes tiek izmantotas, ja mēs nevēlamies, lai klases apakšklases mainītu / ignorētu konkrētu metodes ieviešanu.
3. piemērs: Kā mantošana darbojas ar statisko metodi?
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")
Rezultāts
Vienāds
Šeit mēs negribētu, lai apakšklase DatesWithSlashes
aizstātu statiskās lietderības metodi, toDashDate
jo tai ir tikai viena lietošana, ti, datuma maiņa uz domuzīmju datumiem.
Mēs varētu viegli izmantot statisko metodi sev par labu, ignorējot getDate()
metodi apakšklasē, lai tā labi darbotos ar DatesWithSlashes
klasi.