logo

Metoda třídy vs statická metoda v Pythonu

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)