Metóda tried vs statická metóda v Pythone

V tomto článku sa budeme venovať základom rozdiel medzi metódou triedy a statickou metódou v Pythone a kedy použiť metódu triedy a statickú metódu v pytóne.

Čo je metóda tried v Pythone?

Dekorátor @classmethod je vstavaný dekorátor funkcií, čo je výraz, ktorý sa vyhodnotí po definovaní vašej funkcie. Výsledok tohto hodnotenia zatieni vašu definíciu funkcie. A triedna metóda prijíma triedu ako implicitný prvý argument, rovnako ako metóda inštancie prijíma inštanciu

Syntax metóda triedy 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. 
  • Metóda triedy je metóda, ktorá je viazaná na trieda a nie objekt triedy.
  • Majú prístup k stavu triedy, pretože vyžaduje parameter triedy, ktorý ukazuje na triedu a nie na inštanciu objektu.
  • Môže upraviť stav triedy, ktorý by sa použil vo všetkých inštanciách triedy. Môže napríklad upraviť premennú triedy, ktorá bude použiteľná pre všetky inštancie.

Čo je statická metóda v Pythone?

Statická metóda neprijíma implicitný prvý argument. Statická metóda je tiež metóda, ktorá je viazaná na triedu a nie na objekt triedy. Táto metóda nemôže pristupovať alebo upravovať stav triedy. Je prítomný v triede, pretože má zmysel, aby bola metóda prítomná v triede.

Syntax Python Statická metóda:

 class C(object):  @staticmethod  def fun(arg1, arg2, ...):  ... returns: a static method for function fun. 

Metóda tried vs statická metóda

Rozdiel medzi metódou Class a statickou metódou je:

  • Metóda triedy berie cls ako prvý parameter, zatiaľ čo statická metóda nepotrebuje žiadne špecifické parametre.
  • Metóda triedy môže pristupovať alebo upravovať stav triedy, zatiaľ čo statická metóda k nemu nemôže pristupovať ani ho upravovať.
  • Vo všeobecnosti statické metódy nevedia nič o stave triedy. Sú to metódy pomocného typu, ktoré berú niektoré parametre a pracujú na týchto parametroch. Na druhej strane metódy triedy musia mať triedu ako parameter.
  • Na vytvorenie metódy triedy používame @classmethod decorator v pythone a na vytvorenie statickej metódy v pythone používame @staticmethod decorator.

Kedy použiť triedu alebo statickú metódu?

  • Vo všeobecnosti používame metódu triedy na vytvorenie továrenských metód. Továrenské metódy vracajú objekty triedy (podobné ako konštruktor) pre rôzne prípady použitia.
  • Na vytváranie úžitkových funkcií vo všeobecnosti používame statické metódy.

Ako definovať metódu triedy a statickú metódu?

Na definovanie metódy triedy v pythone používame @classmethod decorator a na definovanie statickej metódy používame @staticmethod decorator.
Pozrime sa na príklad, aby sme pochopili rozdiel medzi nimi. Povedzme, že chceme vytvoriť triedu Osoba. Teraz python nepodporuje preťaženie metód ako C++ alebo Java, takže na vytváranie výrobných metód používame metódy tried. V nižšie uvedenom príklade používame metódu triedy na vytvorenie objektu osoby od roku narodenia.

Ako je vysvetlené vyššie, na vytváranie pomocných funkcií používame statické metódy. V nižšie uvedenom príklade používame statickú metódu na kontrolu, či je osoba dospelá alebo nie.

Jeden jednoduchý príklad:

metóda triedy:

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>

Výkon

10 

Statická metóda: -

Python3




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ýkon

30 30 

Nižšie je kompletná Implementácia

Python3




# 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ýkon:

21 25 True 

Pomocný priestor: O(1)