Vstavaná funkcia staticmethod () vracia statickú metódu pre danú funkciu.
Syntax staticmethod()
je:
staticmethod (funkcia)
Používanie staticmethod()
sa považuje za nepytónsky spôsob vytvárania statickej funkcie.
Preto v novších verziách Pythonu môžete použiť @staticmethod
dekoratér.
Syntax @staticmethod
je:
@staticmethod def func (args, …)
staticmethod () parametre
staticmethod()
Metóda preberá jeden parameter:
- funkcia - funkcia, ktorú je potrebné previesť na statickú metódu
Návratová hodnota zo staticmethod ()
Tieto staticmethod()
vracia statické metódy pre funkciu odovzdaný ako parameter.
Čo je to statická metóda?
Statické metódy, podobne ako metódy triedy, sú metódy, ktoré sa viažu skôr na triedu ako na jej objekt.
Nevyžadujú vytvorenie inštancie triedy. Nie sú teda závislé od stavu objektu.
Rozdiel medzi statickou metódou a metódou triedy je:
- Statická metóda nevie nič o triede a zaoberá sa iba parametrami.
- Metóda triedy pracuje s triedou, pretože jej parametrom je vždy samotná trieda.
Môže ich volať tak trieda, ako aj jej objekt.
Class.staticmethodFunc () alebo dokonca Class (). StaticmethodFunc ()
Príklad 1: Vytvorenie statickej metódy pomocou 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))
Výkon
Celková suma je: 15
Kedy použijete statické metódy?
1. Zoskupenie užitočnej funkcie do triedy
Statické metódy majú obmedzený prípad použitia, pretože rovnako ako metódy triedy alebo iné metódy v rámci triedy, nemôžu získať prístup k vlastnostiam samotnej triedy.
Ak však potrebujete pomocnú funkciu, ktorá nepristupuje k žiadnym vlastnostiam triedy, ale má zmysel, že patrí do tejto triedy, použijeme statické funkcie.
Príklad 2: Vytvorenie úžitkovej funkcie ako statickej metódy
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")
Výkon
Rovnaký
Tu máme Dates
triedu, ktorá pracuje iba s dátumami s pomlčkami. V našej predchádzajúcej databáze boli však všetky dátumy uvedené v lomkách.
Aby bolo možné previesť na lomka dáta palubných termínoch, sme vytvorili úžitkovú funkciu toDashDate
v rámci Dates
.
Je to statická metóda, pretože nepotrebuje prístup k žiadnym svojim vlastnostiam Dates
a vyžaduje iba parametre.
Môžeme tiež vytvárať toDashDate
mimo triedy, ale pretože to funguje iba pre dátumy, je logické ponechať to vnútri Dates
triedy.
2. Jednotná implementácia
Statické metódy sa používajú, keď nechceme, aby podtriedy zmeny triedy prepísali konkrétnu implementáciu metódy.
Príklad 3: Ako funguje dedenie statickou metódou?
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")
Výkon
Rovnaký
Tu by sme nechceli, aby podtrieda DatesWithSlashes
prepísala metódu statického úžitku, toDashDate
pretože má iba jedno použitie, tj zmenu dátumu na dash-dates.
Statickú metódu by sme mohli ľahko použiť vo svoj prospech prepísaním getDate()
metódy v podtriede tak, aby dobre fungovala s DatesWithSlashes
triedou.