lettura facile

I metodi statici in Python

Oggi parliamo dei metodi statici in Python, un argomento che può sembrare un po' astratto all'inizio, ma che è molto utile una volta che lo si comprende bene.

Cos'è un metodo statico? In Python, un metodo statico è un tipo di metodo che appartiene a una classe, ma non può accedere direttamente né agli attributi dell'istanza (come `self`) né a quelli della classe (come `cls`). Questo significa che un metodo statico non può modificare lo stato dell'istanza o della classe. Il metodo statico è come una funzione normale, ma è contenuto nel namespace della classe.

In altre parole un metodo statico di una classe può essere chiamato anche senza creare una istanza.

In Python, puoi definire un metodo statico usando il decoratore @staticmethod.

@staticmethod
def nomeMetodo():
    pass

I metodi statici sono utili soprattutto quando vuoi raggruppare funzioni utili sotto il namespace di una classe per una migliore organizzazione del codice e vuoi che siano chiamabili senza dover istanziare la classe.

Inoltre, essendo indipendenti dallo stato dell'istanza, i metodi statici possono essere leggermente più efficienti in termini di prestazioni.

Mentre i metodi di classe e i metodi di istanza sono oggetti types.MethodType, i metodi statici sono oggetti types.FunctionType, ovvero sono semplici funzioni. Quindi, non hanno l'attributo __self__. Dove __self__ fa riferimento all'oggetto passato in modo implicito come primo argomento, quindi l'istanza nei metodi di istanza o la classe nei metodi di classe.

Ecco un esempio pratico:

class Calcolatrice:
    @staticmethod
    def addizione(a, b):
         return a + b

    def sottrazione(self, a,b):
         return a-b

In questo esempio, il metodo addizione() è un metodo statico della classe.

Questo significa che puoi chiamarlo anche senza creare un'istanza della classe:

risultato1 = Calcolatrice.addizione(5, 3)
print(risultato1)

8

Il metodo sottrazione() è invece un metodo di istanza.

Quindi, puoi chiamarlo solo da un'istanza della classe.

oggetto = Calcolatrice()
risultato2 = Oggetto.sottrazione(10, 4)
print(risultato2)

6

E' un esempio molto semplice ma rende chiara la differenza tra metodi statici e metodi di istanza.

Il metodo di istanza non puoi chiamarlo senza aver definito prima un oggetto della classe. 

Viceversa, il metodo statico puoi chiamarlo senza aver definito l'istanza e, se vuoi, anche da un'istanza.

Ad esempio, definisci una istanza della classe e chiama il metodo statico addizione() dall'istanza.

oggetto = Calcolatrice()
risultato2 = oggetto.addizione(5, 3)
print(risultato2)

8

Nota che puoi creare un metodo statico anche in modo implicito, senza usare il decoratore @staticmethod . Tuttavia, questo comporta alcune limitazioni rispetto all'uso esplicito del decoratore. il risultato non è esattamente lo stesso.

class Calcolatrice:

    def addizione(a, b):
         return a + b

Questo ti permette di chiamare il metodo senza creare un'istanza della classe.

risultato1 = Calcolatrice.addizione(5, 3)
print(risultato1)

8

Tuttavia, in questo caso non puoi chiamare il metodo da un'istanza della classe.

oggetto = Calcolatrice()
risultato2 = oggetto.addizione(5, 3)
print(risultato2)

TypeError: Calcolatrice.addizione() takes 2 positional arguments but 3 were given

In altre parole, quando crei un metodo statico in modo implicito, quello che definisci è semplicemente una funzione ospitata all'interno della classe.

In conclusione, ricorda che i metodi statici sono semplicemente funzioni regolari incapsulate nel namespace della classe. Usali solo quando hai bisogno di funzioni che non dipendono dallo stato di un'istanza o della classe stessa.

Spero che questa guida ti sia stata utile. Se hai altre domande o vuoi approfondire ulteriormente, fammi sapere!




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




FacebookTwitterLinkedinLinkedin