Differenze tra Metodi di Classe e Metodi Statici

The Electrician (800 points)
5 7 11
asked Sep 11, 2020 in Programmare in Python by The Electrician (800 points)
edited Sep 11, 2020 by The Electrician

Come da titolo, non ho ben capito la differenza tra  metodi di classe e metodi statici.

I primi sono simili ai metodi di istanza, ma hanno diverse differenze: i metodi di istanza vengono invocati su una determinata istanza (o passando l'istanza come parametro), fanno uso della parola chiave self e producono un risultato diverso a seconda dell'istanza su cui vengono invocati.
I metodi di classe si riferiscono alla classe, quindi valgono per tutte le istanze generate da quella classe, fanno uso della parola chiave cls e per poterli creare, hanno bisogno del decoratore @classmethod.

A vederli così mi ricordano molto i metodi statici in Java, ma Python dispone proprio di metodi statici diversi dai metodi di classe: non fanno uso di parole chiavi (quindi possono essere definiti anche senza parametri) e necessitano del decoratore @staticmethod.

Tuttavia, a me sembra che facciano la stessa cosa e non capisco bene la differenza trai due che appare essere limitata al solo fatto che i metodi di classe anno un riferimento alla propria classe rispetto ai metodi statici. E' possibile che quest'ultimi siano solo metodi di classe "più semplice"?

369 views

1 Answer

andrea.sterbini (172680 points)
511 927 1776
answered Sep 12, 2020 by andrea.sterbini (172,680 points)
Gli @staticmethod sono metodi della classe che non ricevono l'argomento cls e quindi non la possono modificare.

Vedi https://realpython.com/instance-class-and-static-methods-demystified/
The Electrician (800 points)
5 7 11
commented Sep 12, 2020 by The Electrician (800 points)
Grazie mille!