Decoradores en python ¿Qué son? + Python OOP

Flojo!Hoy voy a redactar sobre los decoradores en python. Y si ya se que están esperando mas entradas, que cada vez me visitan mas androides,y ya nose de donde salen!. Pero no les voy a mentir, siempre encuentro una escusa para no escribir. Llamemoslé flojera.. En fin a lo que viniste decorador!! ¿Que coño es eso?

Recordamos que una función puede recibir como argumento para su parámetro otra función.

Pues un decorador es una función que recibe como argumento a otra función para devolver otra función..

Bien, podríamos decirlo también así:

Importante!
La función A toma como argumento la función B para devolver una función C

Los decoradores pueden definirse como estereotipos o patrones de diseño. Que permiten a una función (A) o clase de objeto (A) tomar otra función (B) como argumento para devolver una función (C). De esta manera obtendremos funciones dinámicas (que pueden cambiar) sin tener nosotros que cambiar su código fuente!

Bien ahora veamos esto mas en profundidad y llevado a la practica como a mi me gusta! Pero antes déjame aclararte que podemos dividir a los decoradores en grupos, los que permiten argumentos y los que no. Y también los que modifican la firma o signatura del método que decoran y los que no.

Ya te lié! Ya puedo vivir en paz.. Que no! Vamos a crear un decorador, venga!

Creando un decorador en python

 

 

Diagrama de los decoradores en python

Resultado:

Perro dice:

Guau!

Como puedes ver en el diagrama la función Saluda() pasara por el decorador siempre dando como resultado una nueva función ejecutada que muestra lo que se encuentra dentro del decorador, es decir, la función Saluda() sale decorada!

A sería el decorador

B sería la función saluda

C sería la función nueva.

Bien espero que lo hallas entendido!! Ahora supongamos que definimos otra función bajo de este decorador, que en este caso sera Despedida().

Resultado:

Perro dice:
Guau!
Chau

Como vez no vuelve a imprimir «Perro dice:» porque no se aplico el decorador, para eso debe volverse a colocar antes de la función Despedida() en este caso, así:

Resultado:

Perro dice:
Guau!
Perro dice:
Chau
El perro mueve la cola

Bueno, también agregue una función para que mueva la cola sin decorador para que vieras la diferencia.

Decoradores en clases de python – OOP

Ahora vamos a llevar esto para trabajar con clases y descubrir que representa un decorador y como lo aplicamos dentro de la programacion orientada a objetos. Anteriormente te había mostrado algunos decoradores en variables de métodos de las clases. Pero ahora utilizamos los nuestros propios.

Seguimos con los perritos que ladran, pero en este caso vamos a crear una clase perro y dentro el método saluda con un mensaje personalizado. Por supuesto vamos a decorar este método utilizando el mismo decorador.

Ejemplo

Resultado:

Perro dice:
Uso Puppy Linux!
Guau!

 

Excelente, pero si aun no has entendido lo volvemos a explicar mostrando el orden en el que trabaja el código. Solo para que tengas en cuenta los decoradores son justamente eso, una plantilla, una fabrica de ensamblar una función dentro de otra y devolver una mas gorda. Como viste en mi diagrama 😛

Fíjate como funciona con clases, casi igual solo que superpusimos una clase y nuestra función esta dentro como un método de esta clase.

Decoradores en clases de python

Ahora si lo entiendes!. Verdad?

La dinámica de los decoradores

Pero acaso no era que los decoradores nos permitían dinamizar estas funciones, porque estas utilizando los parámetros en el decorador. ¿Y si usáramos el mismo decorador en otro método? ¿Estamos obligados a usar los mismos parámetros para la función func y nueva_funcion o que? No!! Mira si cambiamos esto:

Resultado:

Perro dice:
Uso Puppy Linux!
Guau!
Perro dice:
Doy la pata
La pata, la pata afgsad! Guau!

Como ves cambiamos los parámetros de func() por solo parametro1 y self por instanciar. Agregamos otro método al decorador y lo llamamos también!. Todo ok, todo perfecto!!

Esta es la estructura correcta para usar decoradores en clases. Así que a partir de ahora recuerda esto a la hora de trabajar con clases porque te permitirá ahorrar mucho código no teniendo que volver a colocar todo ese código que esta dentro del decorador para cada método.

Descansando en la nube: login offY esto es todo por hoy. Necesito dormir!! Espero te halla sido de utilidad y no critiques mis diagramas, que tu con el paint no eres Picasso! Un abrazo y no olvides compartir con aquellos interesados en programar. Nos vemos pronto en otra entrada!

 

 

 

Ayúdame a llegar a mas personas!
  • 17
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  • 17
  •  
  •  
  •  
  •  
  •  
  •