lettura facile

I metodi di classe in Python

I metodi di classe in Python sono un tipo speciale di metodi che ricevono la classe come primo argomento implicito, anziché l'istanza.

Questi metodi sono utili quando è necessario accedere o modificare lo stato della classe stessa piuttosto che quello di una singola istanza.

Per definire un metodo di classe, si utilizza il decoratore @classmethod.

class nomeClasse:
    @classmethod
    def nomeMetodo(cls):
        print(id(cls)) 

Il primo parametro del metodo di classe è convenzionalmente chiamato cls, che rappresenta la classe a cui appartiene il metodo.

Ecco un esempio per chiarire:

Definisci la classe "miaClasse" con un metodo di classe al suo interno chiamato "miaMetodo".

class miaClasse:
    @classmethod
    def mioMetodo(cls):
        print(id(cls))

Il metodo mioMetodo() non fa altro che restituire il numero identificativo della classe.

Ora chiama il metodo di classe

miaClasse.mioMetodo()

93842345589184

Il numero identificativo della classe è 93842345589184.

Per verificarlo puoi usare l'istruzione id() 

print(id(miaClasse))

93842345589184

Crea un'istanza della classe "miaClasse"

p = miaClasse()

Puoi chiamare il metodo di classe mioMetodo() anche tramite l'istanza

p.mioMetodo()

93842345589184

Il risultato è sempre lo stesso.

Nota che anche se chiami il metodo di classe `mioMetodo` tramite un'istanza di `miaClasse`, la classe viene passata automaticamente come primo argomento. Questo è evidente dall'id stampato, che è lo stesso dell'id della classe `miaClasse`. Per questa ragione il parametro cls deve essere sempre indicato quando definisci un metodo di classe.

Se provi a definire un metodo di classe senza specificare il parametro cls, ottieni un errore poiché la classe viene comunque passata come primo argomento implicito:

Ad esempio, definisci il metodo di classe senza il parametro cls.

class miaClasse:
   @classmethod
   def mioMetodo():
      print('test')

Se ora chiami il metodo foo come metodo di classe, Python restituisce un errore.

miaClasse.mioMetodo()

TypeError: miaClasse.mioMetodo() takes 0 positional arguments but 1 was given

Infine, ricorda che i metodi di classe sono riconosciuti come oggetti di tipo `method`:

import types
print(type(miaClasse.mioMetodo))

<class 'method'>

In sintesi, i metodi di classe sono un modo per definire comportamenti che coinvolgono la classe stessa piuttosto che le sue istanze, e sono identificati dall'uso del decoratore `@classmethod` e dal parametro `cls`. 




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin