Resumen

Domina cómo aplicar los decoradores @staticmethod y @classmethod en Python para escribir clases claras y reutilizables. Verás cómo centralizar utilidades como validar ISBN y cómo crear constructores alternativos que generan instancias con reglas específicas, sin depender de objetos previos.

Métodos estáticos y de clase en Python: organiza utilidades y crea instancias de forma flexible.

¿Qué es un static method y cómo validar ISBN en Python?

Un método estático encapsula lógica que no usa estado de instancia. No recibe self. Es perfecto para utilidades y validaciones puras. Aquí, Biblioteca.validar_isbn comprueba que un ISBN tenga al menos diez caracteres con len y retorna True o False.

# biblioteca.py
class Biblioteca:
    @staticmethod
    def validar_isbn(isbn: str) -> bool:
        return len(isbn) >= 10

¿Cómo se llama y se prueba el método estático?

Se invoca desde la clase, sin instanciar. Se imprime el resultado para verificar la lógica.

# main.py
from biblioteca import Biblioteca

resultado = Biblioteca.validar_isbn("12345")
print("El ISBN es válido:", resultado)  # False

resultado = Biblioteca.validar_isbn("1234567890")
print("El ISBN es válido:", resultado)  # True

Claves prácticas: usa el decorador @staticmethod, evita self, agrupa utilidades relacionadas en la clase Biblioteca, y llama como Biblioteca.validar_isbn(valor).

¿Cómo usar un class method como constructor alternativo en la clase libro?

Un método de clase opera a nivel de clase y recibe el parámetro cls. Permite crear constructores alternativos que devuelven nuevas instancias con configuraciones predefinidas. En Libro, crear_no_disponible construye un objeto con disponible=False sin tocar el constructor principal.

# libro.py
class Libro:
    @classmethod
    def crear_no_disponible(cls, titulo, autor, isbn):
        return cls(titulo, autor, isbn, disponible=False)

¿Cómo instanciar con el método de clase en main.py?

Se llama directamente desde la clase y se verifica el atributo disponible.

# main.py
from libro import Libro

libro_no_disp = Libro.crear_no_disponible(
    titulo="Libro de prueba",
    autor="Autor de prueba",
    isbn="1234567890",
)
print("Libro disponible:", libro_no_disp.disponible)  # False

Puntos clave: decorador @classmethod, uso de cls para crear instancias, retorno del objeto y acceso a atributos como disponible.

¿Cuáles son las diferencias clave entre staticmethod y classmethod?

Comprender las diferencias ayuda a separar la lógica de clase de la lógica de instancias, mejorando organización y mantenimiento.

  • Ámbito: @staticmethod no usa self ni cls. @classmethod recibe cls.
  • Propósito: @staticmethod sirve para utilidades como validar ISBN con len. @classmethod crea instancias con reglas propias, como un constructor alternativo.
  • Invocación: ambos se llaman desde la clase. No requieren instancia previa.
  • Organización: centralizan validaciones y fábricas en sus clases (Biblioteca, Libro).
  • Salida: @staticmethod retorna valores (por ejemplo, True/False). @classmethod retorna objetos configurados.

¿Te animas a aplicarlo? Crea un método de clase en Estudiante para generar un estudiante en una carrera específica y comparte tu código en los comentarios.