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.