Sisäänrakennettu staticmethod () -funktio palauttaa staattisen menetelmän tietylle funktiolle.
Syntaksi staticmethod()
on:
staattinen menetelmä (toiminto)
Käyttämistä staticmethod()
pidetään epä Pythonin tapana luoda staattinen toiminto.
Näin ollen Pythonin uudemmissa versioissa voit käyttää @staticmethod
sisustajaa.
Syntaksi @staticmethod
on:
@staticmethod def func (args,…)
staticmethod () -parametrit
staticmethod()
Menetelmä ottaa yhden parametrin:
- function - toiminto, joka on muunnettava staattiseksi menetelmäksi
Palautusarvo staattisesta menetelmästä ()
staticmethod()
Palaa staattinen menetelmä funktion välitetään parametrin.
Mikä on staattinen menetelmä?
Staattiset menetelmät, aivan kuten luokan menetelmät, ovat menetelmiä, jotka on sidottu luokkaan sen objektin sijaan.
Ne eivät vaadi luokan ilmentymän luomista. Joten ne eivät ole riippuvaisia kohteen tilasta.
Staattisen menetelmän ja luokan menetelmän ero on:
- Staattinen menetelmä ei tiedä mitään luokasta ja käsittelee vain parametreja.
- Luokkamenetelmä toimii luokan kanssa, koska sen parametri on aina luokka itse.
Niitä voidaan kutsua sekä luokan että kohteen mukaan.
Class.staticmethodFunc () tai jopa Class (). StaticmethodFunc ()
Esimerkki 1: Luo staattinen menetelmä käyttämällä 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))
Tuotos
Summa on: 15
Milloin käytät staattisia menetelmiä?
1. Apuohjelmatoiminnon ryhmittely luokkaan
Staattisilla menetelmillä on rajoitettu käyttötapaus, koska ne eivät voi luokkansa ominaisuuksien tavoin käyttää luokkamenetelmiä tai muita luokan menetelmiä.
Kuitenkin, kun tarvitset apuohjelmatoimintoa, joka ei käytä luokan ominaisuuksia, mutta on järkevää kuulua luokkaan, käytämme staattisia toimintoja.
Esimerkki 2: Luo apuohjelmafunktio staattisena menetelmänä
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")
Tuotos
Yhtä suuri
Täällä meillä on Dates
luokka, joka toimii vain viivojen kanssa. Aikaisemmassa tietokannassamme kaikki päivämäärät olivat kuitenkin kauttaviivoja.
Siirtääksesi kauttaviivan päivämäärät viiva-päivämääriksi, olemme luoneet toDashDate
sisällä apuohjelmatoiminnon Dates
.
Se on staattinen menetelmä, koska sen ei tarvitse käyttää mitään omia ominaisuuksiaan Dates
ja se vaatii vain parametrit.
Voimme luoda toDashDate
myös luokan ulkopuolella, mutta koska se toimii vain päivämäärille, on loogista pitää se Dates
luokan sisällä .
2. Yksi toteutus
Staattisia menetelmiä käytetään, kun emme halua luokan muutosta / ohittaa tietyn menetelmän toteutuksen.
Esimerkki 3: Kuinka perintö toimii staattisella menetelmällä?
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")
Tuotos
Yhtä suuri
Täällä emme halua, että alaluokka DatesWithSlashes
ohittaa staattisen apuohjelman menetelmän, toDashDate
koska sillä on vain yksi käyttö, ts. Vaihda päivämäärä viiva-päivämääriksi.
Voisimme helposti käyttää staattista menetelmää hyödyksi ohittamalla getDate()
menetelmän alaluokassa niin, että se toimii hyvin DatesWithSlashes
luokan kanssa.