Usare i classmethod in Python
Di primo acchitto potremmo pensare ai classmethod di Python come a dei metodi statici.
In verità ci stanno alcune differenze:
- un classmethod ha come primo parametro cls, mentre i metodi statici no
- un classmethod può modificare lo state di una classe, mentre i metodi statici no
- altre eventuali che non conosco
In generale è conveniente usare un classmethod per:
- i factory methods
- quando dobbiamo accedere e modificare i dati di una classe
- quando abbiamo bisogno di usare altri metodi per instanziare una classe
Detto ciò vediamo un esempio:
import datetime
class Persona:
def __init__(self, nome, eta):
self.nome = nome
self.eta = eta
@classmethod
def calcola_eta(cls, nome, anno):
eta = datetime.date.today().year - anno
return cls(nome, eta)
p = Persona.calcola_eta('matteo', 1985)
print(p.nome)
print(p.eta)
Come vedete abbiammo usato il decoratore @classmethod.
Questo metodo ritorna due valori, di cui l'età viene calcolata a partire dall'anno che gli passiamo.
Enjoy!
python classmethod
Commentami!