Sobes.tech
Junior — Middle

Qual è la differenza tra l'uso di metodi dichiarati come static e class in Python?

sobes.tech AI

Risposta dell'AI

In Python, i metodi dichiarati come @staticmethod e @classmethod differiscono nel modo in cui accedono ai dati della classe e dell'istanza:

  • @staticmethod — è un metodo che non riceve automaticamente né un riferimento all'istanza (self) né alla classe (cls). Si comporta come una funzione normale, ma si trova all'interno della classe per raggruppamento logico. Non può modificare lo stato della classe o dell'istanza.

  • @classmethod — è un metodo che riceve come primo argomento la classe stessa (cls), invece di un'istanza. Permette di lavorare con gli attributi della classe, creare costruttori alternativi e modificare lo stato della classe.

Esempio:

class MyClass:
    count = 0

    @staticmethod
    def greet():
        print("Ciao!")

    @classmethod
    def increment_count(cls):
        cls.count += 1

MyClass.greet()          # Stampa: Ciao!
MyClass.increment_count()
print(MyClass.count)     # Stampa: 1

Pertanto, staticmethod è semplicemente una funzione all’interno della classe, mentre classmethod è un metodo che lavora con la classe stessa.