Usare i classmethod in Python

Mattepuffo's logo
Usare i classmethod in Python

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!


Condividi

Commentami!