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)