¿Cuál es el uso idiomático de @classmethod?
Opciones
- Métodos que no necesitan ni la clase ni la instancia
- Constructores alternativos, como
Date.from_iso('2026-01-01')(Opción correcta) - Hacer un método privado para que solo la clase pueda llamarlo
- 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.