Python staticmethod ()

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ť @staticmethoddekoratér.

Syntax @staticmethodje:

 @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 Datestriedu, 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 toDashDatev rámci Dates.

Je to statická metóda, pretože nepotrebuje prístup k žiadnym svojim vlastnostiam Datesa vyžaduje iba parametre.

Môžeme tiež vytvárať toDashDatemimo triedy, ale pretože to funguje iba pre dátumy, je logické ponechať to vnútri Datestriedy.

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 DatesWithSlashesprepísala metódu statického úžitku, toDashDatepretož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 DatesWithSlashestriedou.

Zaujímavé články...