V tomto článku se budeme zabývat základními rozdíl mezi metodou třídy a statickou metodou v Pythonu a kdy použít metodu třídy a statickou metodu v pythonu.
Co je metoda třídy v Pythonu?
Dekorátor @classmethod je vestavěný dekorátor funkcí, což je výraz, který se vyhodnotí po definování vaší funkce. Výsledek tohoto vyhodnocení zastíní vaši definici funkce. A třídní metoda přijímá třídu jako implicitní první argument, stejně jako metoda instance přijímá instanci
Syntaxe metody třídy Python:
class C(object): @classmethod def fun(cls, arg1, arg2, ...): .... fun: function that needs to be converted into a class method returns: a class method for function.>
- Metoda třídy je metoda, která je vázána na třída a ne předmět třídy.
- Mají přístup ke stavu třídy, protože vyžaduje parametr třídy, který ukazuje na třídu a ne na instanci objektu.
- Může upravit stav třídy, který by se vztahoval na všechny instance třídy. Může například upravit proměnnou třídy, která bude použitelná pro všechny instance.
Co je statická metoda v Pythonu?
Statická metoda neobdrží implicitní první argument. Statická metoda je také metoda, která je vázána na třídu a ne na objekt třídy. Tato metoda nemůže přistupovat ke stavu třídy ani jej upravovat. Je přítomen ve třídě, protože dává smysl, aby byla metoda přítomna ve třídě.
Syntaxe Python Statická metoda:
class C(object): @staticmethod def fun(arg1, arg2, ...): ... returns: a static method for function fun.>
Metoda tříd vs statická metoda
Rozdíl mezi metodou Class a statickou metodou je:
- Metoda třídy bere cls jako první parametr, zatímco statická metoda nepotřebuje žádné specifické parametry.
- Metoda třídy může přistupovat ke stavu třídy nebo jej upravovat, zatímco statická metoda k němu nemůže přistupovat ani jej upravovat.
- Obecně platí, že statické metody nevědí nic o stavu třídy. Jsou to metody obslužného typu, které přebírají některé parametry a pracují na těchto parametrech. Na druhou stranu metody třídy musí mít jako parametr třídu.
- K vytvoření metody třídy používáme @classmethod decorator v pythonu a k vytvoření statické metody v pythonu používáme @staticmethod decorator.
Kdy použít třídu nebo statickou metodu?
- K vytvoření továrních metod obecně používáme metodu třídy. Tovární metody vracejí objekty třídy (podobně jako konstruktor) pro různé případy použití.
- K vytváření užitkových funkcí obecně používáme statické metody.
Jak definovat metodu třídy a statickou metodu?
K definování metody třídy v pythonu používáme @classmethod decorator a k definování statické metody používáme @staticmethod decorator.
Podívejme se na příklad, abychom pochopili rozdíl mezi oběma. Řekněme, že chceme vytvořit třídu Osoba. Nyní python nepodporuje přetěžování metod jako C++ nebo Java, takže k vytváření továrních metod používáme metody tříd. V níže uvedeném příkladu používáme metodu třídy k vytvoření objektu osoby od roku narození.
Jak bylo vysvětleno výše, k vytváření užitkových funkcí používáme statické metody. V níže uvedeném příkladu používáme statickou metodu ke kontrole, zda je osoba dospělá nebo ne.
Jeden jednoduchý příklad:
metoda třídy:
odstranit poslední znak z řetězce
Python3
class> MyClass:> >def> __init__(>self>, value):> >self>.value>=> value> >def> get_value(>self>):> >return> self>.value> # Create an instance of MyClass> obj>=> MyClass(>10>)> # Call the get_value method on the instance> print>(obj.get_value())># Output: 10> |
>
příkaz arp
>Výstup
10>
Statická metoda: -
Python3
mylivecricket v živém kriketu
class> MyClass:> >def> __init__(>self>, value):> >self>.value>=> value> >@staticmethod> >def> get_max_value(x, y):> >return> max>(x, y)> # Create an instance of MyClass> obj>=> MyClass(>10>)> print>(MyClass.get_max_value(>20>,>30>))> print>(obj.get_max_value(>20>,>30>))> |
>
>Výstup
30 30>
Níže je kompletní Implementace
Python3
latexový seznam
# Python program to demonstrate> # use of class method and static method.> from> datetime>import> date> class> Person:> >def> __init__(>self>, name, age):> >self>.name>=> name> >self>.age>=> age> ># a class method to create a Person object by birth year.> >@classmethod> >def> fromBirthYear(>cls>, name, year):> >return> cls>(name, date.today().year>-> year)> ># a static method to check if a Person is adult or not.> >@staticmethod> >def> isAdult(age):> >return> age>>18> person1>=> Person(>'mayank'>,>21>)> person2>=> Person.fromBirthYear(>'mayank'>,>1996>)> print>(person1.age)> print>(person2.age)> # print the result> print>(Person.isAdult(>22>))> |
>
>
Výstup:
21 25 True>
Pomocný prostor: O(1)