Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Differenze tra Metodi di Classe e Metodi Statici

The Electrician (800 points)
7 8 11
in Programmare in Python by (800 points)
edited by

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"?

802 views

1 Answer

andrea.sterbini (207940 points)
756 1270 2377
by (208k 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)
7 8 11
by (800 points)
Grazie mille!