logo

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>

int parseint

>

>

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)