Uso de classmethod en Python

logo python

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í
Translate »