¿Qué es classmethod en Python y para qué sirve?
En el fascinante mundo de la programación en Python, nos encontramos con una gran variedad de herramientas y funcionalidades que nos permiten desarrollar aplicaciones de manera eficiente y elegante. Una de estas herramientas es classmethod, una función incorporada en Python que nos brinda una forma única de trabajar con métodos de clase.
¿Qué es un método de clase en Python?
Antes de adentrarnos en el funcionamiento de classmethod, es importante entender qué es un método de clase en Python. En términos sencillos, un método de clase es aquel que está asociado a la clase misma en lugar de estar asociado a una instancia específica de la clase.
Imagina que tienes una clase llamada Coche
y quieres tener un método que te permita calcular la velocidad máxima de todos los coches de esa clase. En lugar de tener que crear una instancia de la clase para acceder al método, puedes utilizar un método de clase que esté directamente asociado a la clase Coche
.

La sintaxis de classmethod
La sintaxis para definir un método de clase en Python es bastante sencilla. Simplemente se utiliza el decorador @classmethod
seguido de la definición del método. Veamos un ejemplo:
class Coche:
velocidad_maxima = 200
@classmethod
def calcular_velocidad_maxima(cls):
return cls.velocidad_maxima
En este ejemplo, hemos definido un método de clase llamado calcular_velocidad_maxima
que retorna la velocidad máxima de la clase Coche
. El parámetro cls
es una convención utilizada para referirse a la clase en sí misma.
Beneficios de utilizar classmethod
Ahora que sabemos cómo se utiliza classmethod, es momento de explorar los beneficios que nos brinda esta funcionalidad en Python.

Acceso a atributos de clase
Uno de los principales beneficios de utilizar classmethod es que nos permite acceder a los atributos de clase sin necesidad de crear una instancia de la clase. Esto significa que podemos utilizar métodos de clase para realizar operaciones o cálculos basados en atributos que son compartidos por todas las instancias de la clase.
Continuando con nuestro ejemplo de la clase Coche
, si queremos calcular la velocidad promedio de todos los coches de la clase, podemos utilizar un método de clase que acceda al atributo velocidad_maxima
y realice el cálculo correspondiente.
Creación de métodos alternativos de inicialización
Otro beneficio interesante de classmethod es que nos permite crear métodos alternativos de inicialización de una clase. Esto puede resultar útil en situaciones donde necesitamos crear instancias de una clase utilizando parámetros diferentes a los que se utilizan en el método de inicialización convencional (__init__
).
Supongamos que tenemos una clase llamada Persona
y queremos crear un método de clase que nos permita crear instancias de la clase a partir de una cadena de texto que contenga el nombre y la edad de la persona, separados por un guion. Podríamos utilizar classmethod para lograr esto de la siguiente manera:
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
@classmethod
def crear_desde_cadena(cls, cadena):
nombre, edad = cadena.split('-')
return cls(nombre, int(edad))
Con este método de clase, podemos crear instancias de la clase Persona
utilizando una cadena de texto en lugar de los parámetros convencionales:
persona = Persona.crear_desde_cadena("Juan-25")
print(persona.nombre) # Juan
print(persona.edad) # 25
Polimorfismo
El polimorfismo es un concepto clave en la programación orientada a objetos que nos permite utilizar diferentes clases de manera intercambiable. classmethod nos brinda la posibilidad de utilizar este concepto al permitirnos definir métodos de clase en una clase base y luego sobrescribirlos en las clases derivadas.
Esto nos permite utilizar los métodos de clase de manera consistente en diferentes clases, lo cual puede ser especialmente útil en situaciones donde necesitamos trabajar con múltiples clases que tienen una estructura similar.
Conclusión
En resumen, classmethod es una poderosa herramienta en Python que nos permite trabajar con métodos de clase de una manera flexible y eficiente. Nos brinda la capacidad de acceder a atributos de clase, crear métodos alternativos de inicialización y utilizar el polimorfismo de manera efectiva.
Si bien hemos explorado algunos de los beneficios más destacados de classmethod, existen muchas otras aplicaciones y casos de uso para esta funcionalidad en Python. ¡Así que no dudes en experimentar y descubrir cómo classmethod puede mejorar tus habilidades de programación en Python!
