¿En qué se diferencia el uso de métodos declarados como static y class en Python?
sobes.tech AI
Respuesta de la IA
En Python, los métodos declarados como @staticmethod y @classmethod difieren en la forma en que acceden a los datos de la clase y de la instancia:
-
@staticmethod — es un método que no recibe automáticamente ni una referencia a la instancia (
self) ni a la clase (cls). Se comporta como una función normal, pero se encuentra dentro de la clase para una agrupación lógica. No puede modificar el estado de la clase o de la instancia. -
@classmethod — es un método que recibe como primer argumento la propia clase (
cls), en lugar de una instancia. Permite trabajar con los atributos de la clase, crear constructores alternativos y modificar el estado de la clase.
Ejemplo:
class MyClass:
count = 0
@staticmethod
def greet():
print("¡Hola!")
@classmethod
def increment_count(cls):
cls.count += 1
MyClass.greet() # Imprimirá: ¡Hola!
MyClass.increment_count()
print(MyClass.count) # Imprimirá: 1
Por lo tanto, staticmethod es simplemente una función dentro de la clase, y classmethod es un método que trabaja con la propia clase.