Python staticmethod ()

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

Syntaxe @staticmethodje:

 @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 Datestří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 toDashDaterámci funkce pomocného programu Dates.

Jedná se o statickou metodu, protože nepotřebuje přístup k žádným svým vlastnostem Datesa vyžaduje pouze parametry.

Můžeme také vytvářet toDashDatemimo třídu, ale protože to funguje pouze pro data, je logické, aby to bylo uvnitř Datestří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 DatesWithSlashespřepsala metodu statického nástroje, toDashDateprotož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 DatesWithSlashestřídou.

Zajímavé články...