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)