En este post intentaré explicar de forma sencilla el uso de classmethod en Python y las ventajas que nos ofrece dentro de la programación orientada a objetos.
Classmethod es lo que se llama en Ptyhon un decorador.
Los decoradores en Python son funciones que nos permiten o facilitan determinadas acciones, alteran, modelan o decoran, de ahí su nombre como se comportan otras funciones cuando van precedidas por ellos.
Los decoradores se escriben colocando una arroba delante, por lo que en nuestro caso seria algo asi:
@classmethod
Este decorador permite llamar a una clase, aunque esta aun no haya sido convertida en un objeto.
Veamos un ejemplo sencillo:
class boxeador(object):
def __init__(self):
pass
@classmethod #nos permite usar esta funcion sin que la clase haya sido atribuida a un objeto
def esquina(cls, color):
print("Has tenido suerte, tu esquina es de color {}".format(color))
def main():
color = input('El color que deseas es:')
boxeador.esquina(color) #llamado de la funcion
if __name__ == '__main__':
main()
Como ven hemos podido llamar a esquina()
sin que esta haya sido atribuida a un objeto especifico.
Otros posts sobre Python
Si eliminamos el decorador recibiríamos este error:
TypeError Traceback (most recent call last)
<ipython-input-19-6d278ca6f532> in <module>
11
12 if __name__ == '__main__':
---> 13 main()
<ipython-input-19-6d278ca6f532> in main()
8 def main():
9 color = input('El color que deseas es:')
---> 10 boxeador.esquina(color) #llamado de la funcion
11
12 if __name__ == '__main__':
TypeError: esquina() missing 1 required positional argument: 'color'
O sea nos da un error de tipo, indicando que falta un argumento de posición llamado color, que no hemos asignado a ningún objeto.
Y hasta aquí, y como siempre espero que sirva de ayuda a alguien.
Un saludo
…Y todo, como el diamante, antes de luz , fue carbón
J. Martí