In questo articolo tratteremo le basi differenza tra il metodo della classe e il metodo statico in Python e quando utilizzare il metodo della classe e il metodo statico in pitone.
Cos'è il metodo di classe in Python?
Il decoratore @classmethod è un decoratore di funzioni integrato che è un'espressione che viene valutata dopo che la funzione è stata definita. Il risultato di tale valutazione oscura la definizione della funzione. UN metodo di classe riceve la classe come primo argomento implicito, proprio come un metodo di istanza riceve l'istanza
Sintassi Metodo della classe 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.>
- Un metodo di classe è un metodo associato a classe e non l'oggetto della classe.
- Hanno accesso allo stato della classe poiché richiede un parametro di classe che punta alla classe e non all'istanza dell'oggetto.
- Può modificare lo stato di una classe che si applicherebbe a tutte le istanze della classe. Ad esempio, può modificare una variabile di classe che sarà applicabile a tutte le istanze.
Qual è il metodo statico in Python?
Un metodo statico non riceve un primo argomento implicito. Un metodo statico è anche un metodo associato alla classe e non all'oggetto della classe. Questo metodo non può accedere o modificare lo stato della classe. È presente in una classe perché ha senso che il metodo sia presente in classe.
Sintassi Metodo statico Python:
class C(object): @staticmethod def fun(arg1, arg2, ...): ... returns: a static method for function fun.>
Metodo di classe vs metodo statico
La differenza tra il metodo Class e il metodo statico è:
- Un metodo di classe accetta cls come primo parametro mentre un metodo statico non necessita di parametri specifici.
- Un metodo di classe può accedere o modificare lo stato della classe mentre un metodo statico non può accedervi o modificarlo.
- In generale, i metodi statici non sanno nulla dello stato della classe. Sono metodi di tipo utilità che accettano alcuni parametri e funzionano su tali parametri. D'altra parte i metodi di classe devono avere la classe come parametro.
- Usiamo il decoratore @classmethod in Python per creare un metodo di classe e usiamo il decoratore @staticmethod per creare un metodo statico in Python.
Quando utilizzare la classe o il metodo statico?
- Generalmente utilizziamo il metodo class per creare metodi factory. I metodi factory restituiscono oggetti di classe (simili a un costruttore) per diversi casi d'uso.
- Generalmente utilizziamo metodi statici per creare funzioni di utilità.
Come definire un metodo di classe e un metodo statico?
Per definire un metodo di classe in Python, utilizziamo il decoratore @classmethod e per definire un metodo statico utilizziamo il decoratore @staticmethod.
Vediamo un esempio per capire la differenza tra entrambi. Diciamo che vogliamo creare una classe Persona. Ora, Python non supporta l'overload dei metodi come C++ o Java, quindi utilizziamo metodi di classe per creare metodi factory. Nell'esempio seguente utilizziamo un metodo di classe per creare un oggetto persona dall'anno di nascita.
Come spiegato sopra utilizziamo metodi statici per creare funzioni di utilità. Nell'esempio seguente utilizziamo un metodo statico per verificare se una persona è maggiorenne o meno.
Un semplice esempio:
metodo di classe:
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> |
materiale angolare
>
>Produzione
10>
Metodo statico: -
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>))> |
>
>
programma di array bidimensionale in cProduzione
30 30>
Di seguito è riportata l'implementazione completa
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>))> |
>
>
Produzione:
21 25 True>
Spazio ausiliario: O(1)