Metoda clasei vs metoda statică în Python
În acest articol, vom acoperi elementele de bază diferența dintre metoda clasei vs metoda statică în Python și când să folosiți metoda clasei și metoda statică în piton.
Ce este metoda clasei în Python?
Decoratorul @classmethod este un decorator de funcții încorporat care este o expresie care este evaluată după ce funcția dvs. este definită. Rezultatul acelei evaluări umbrește definiția funcției dvs. A metoda clasei primește clasa ca prim argument implicit, la fel cum o metodă de instanță primește instanța
Sintaxă Metoda clasei 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.
- O metodă de clasă este o metodă care este legată de clasă și nu obiectul clasei.
- Ei au acces la starea clasei, deoarece este nevoie de un parametru de clasă care indică spre clasă și nu spre instanța obiectului.
- Poate modifica o stare de clasă care s-ar aplica în toate instanțele clasei. De exemplu, poate modifica o variabilă de clasă care va fi aplicabilă tuturor instanțelor.
Ce este metoda statică în Python?
O metodă statică nu primește un prim argument implicit. O metodă statică este, de asemenea, o metodă care este legată de clasă și nu de obiectul clasei. Această metodă nu poate accesa sau modifica starea clasei. Este prezent într-o clasă pentru că are sens ca metoda să fie prezentă în clasă.
Sintaxă Python Metodă statică:
class C(object): @staticmethod def fun(arg1, arg2, ...): ... returns: a static method for function fun.
Metoda clasei vs metoda statică
Diferența dintre metoda Class și metoda statică este:
- O metodă de clasă ia cls ca prim parametru, în timp ce o metodă statică nu are nevoie de parametri specifici.
- O metodă de clasă poate accesa sau modifica starea clasei, în timp ce o metodă statică nu o poate accesa sau modifica.
- În general, metodele statice nu știu nimic despre starea clasei. Sunt metode de tip utilitar care preiau anumiți parametri și lucrează asupra acelor parametri. Pe de altă parte, metodele de clasă trebuie să aibă clasa ca parametru.
- Folosim @classmethod decorator în python pentru a crea o metodă de clasă și folosim @staticmethod decorator pentru a crea o metodă statică în python.
Când să folosiți clasa sau metoda statică?
- În general, folosim metoda clasei pentru a crea metode din fabrică. Metodele din fabrică returnează obiecte de clasă (similar cu un constructor) pentru diferite cazuri de utilizare.
- În general, folosim metode statice pentru a crea funcții utilitare.
Cum se definește o metodă de clasă și o metodă statică?
Pentru a defini o metodă de clasă în python, folosim @classmethod decorator, iar pentru a defini o metodă statică folosim @staticmethod decorator.
Să ne uităm la un exemplu pentru a înțelege diferența dintre ambele. Să presupunem că vrem să creăm o persoană de clasă. Acum, python nu acceptă supraîncărcarea metodelor precum C++ sau Java, așa că folosim metode de clasă pentru a crea metode din fabrică. În exemplul de mai jos, folosim o metodă de clasă pentru a crea un obiect persoană din anul nașterii.
După cum sa explicat mai sus, folosim metode statice pentru a crea funcții utilitare. În exemplul de mai jos folosim o metodă statică pentru a verifica dacă o persoană este adultă sau nu.
Un exemplu simplu:
metoda clasei:
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> |
Ieșire
10
Metoda statica: -
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> ))> |
Ieșire
30 30
Mai jos este implementarea completă
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>>>> ,> 21> )> person2> => Person.fromBirthYear(> 'mayank'> ,> 1996> )> print> (person1.age)> print> (person2.age)> # print the result> print> (Person.isAdult(> 22> ))> |
Ieșire:
21 25 True
Spațiu auxiliar: O(1)