Zabudovaná funkce staticmethod () vrací statickou metodu pro danou funkci.
Syntaxe staticmethod()
je:
staticmethod (funkce)
Použití staticmethod()
je považováno za nepytonický způsob vytváření statické funkce.
Proto v novějších verzích Pythonu můžete použít @staticmethod
dekoratér.
Syntaxe @staticmethod
je:
@staticmethod def func (args,…)
staticmethod () parametry
staticmethod()
Metoda přebírá jeden parametr:
- funkce - funkce, kterou je třeba převést na statickou metodu
Návratová hodnota ze staticmethod ()
Tyto staticmethod()
vrací statické metody pro funkci předán jako parametr.
Co je to statická metoda?
Statické metody, podobně jako metody třídy, jsou metody, které jsou vázány spíše na třídu než na její objekt.
Nevyžadují vytvoření instance třídy. Nejsou tedy závislé na stavu objektu.
Rozdíl mezi statickou metodou a metodou třídy je:
- Statická metoda neví nic o třídě a zabývá se pouze parametry.
- Metoda třídy pracuje s třídou, protože její parametr je vždy třída sama.
Mohou být voláni jak třídou, tak jejím objektem.
Class.staticmethodFunc () nebo dokonce Class (). StaticmethodFunc ()
Příklad 1: Vytvoření statické metody pomocí 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ýstup
Součet je: 15
Kdy používáte statické metody?
1. Seskupení obslužné funkce do třídy
Statické metody mají omezený případ použití, protože stejně jako metody třídy nebo jiné metody v rámci třídy nemají přístup k vlastnostem samotné třídy.
Když však potřebujete pomocnou funkci, která nemá přístup k žádným vlastnostem třídy, ale dává smysl, že patří do třídy, použijeme statické funkce.
Příklad 2: Vytvořte funkci nástroje jako statickou metodu
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ýstup
Rovnat se
Tady máme Dates
třídu, která funguje pouze s daty s pomlčkami. V naší předchozí databázi však byla všechna data uvedena v lomítkách.
Aby bylo možné převést data lomítka na data pomlčky, vytvořili jsme v toDashDate
rámci funkce pomocného programu Dates
.
Jedná se o statickou metodu, protože nepotřebuje přístup k žádným svým vlastnostem Dates
a vyžaduje pouze parametry.
Můžeme také vytvářet toDashDate
mimo třídu, ale protože to funguje pouze pro data, je logické, aby to bylo uvnitř Dates
třídy.
2. Jednotná implementace
Statické metody se používají, když nechceme, aby podtřídy třídy změnily / přepsaly konkrétní implementaci metody.
Příklad 3: Jak funguje dědičnost statickou metodou?
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ýstup
Rovnat se
Tady bychom nechtěli, aby podtřída DatesWithSlashes
přepsala metodu statického nástroje, toDashDate
protože má pouze jedno použití, tj. Změnit datum na dash-dates.
Mohli bychom snadno použít statickou metodu k naší výhodě přepsáním getDate()
metody v podtřídě tak, aby fungovala dobře s DatesWithSlashes
třídou.