Sobes.tech
Junior — Middle

¿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.