Repaso
English
PythonIntermedioPY-31

¿Cuál es el uso idiomático de @classmethod?

Opciones

  1. Métodos que no necesitan ni la clase ni la instancia
  2. Constructores alternativos, como Date.from_iso('2026-01-01') (Opción correcta)
  3. Hacer un método privado para que solo la clase pueda llamarlo
  4. Sobrescribir __init__ para cambiar cómo se crean los objetos

Respuesta

Constructores alternativos, como Date.from_iso("2026-01-01")

Por qué

Un classmethod recibe la clase (cls) en lugar de un objeto.

Su uso típico es un constructor alternativo: otra forma de crear un objeto, por ejemplo desde un string. Como llama a cls(...), también crea el tipo correcto cuando se usa en una subclase.

Un staticmethod no recibe nada automáticamente; es solo una función normal guardada dentro de la clase.

class Date:
    def __init__(self, y, m, d): ...

    @classmethod
    def from_iso(cls, text):
        y, m, d = map(int, text.split("-"))
        return cls(y, m, d)

Recuerda

classmethod = constructor alternativo.

Términos clave

Practica esta pregunta en Repaso