[Python-es] ¿ Injección de código con decoradores o herencia ?

Ander Garmendia kelertxiki en gmail.com
Lun Oct 21 22:15:20 CEST 2013


Buenas,

gracias a todos por el interes. Creo que me ha quedado bastante claro el asunto.

- Yeiniel me ha gustado tu solución, solo que yo la utilizaría con la
sintaxis que ha utilizado Juan.
- Sergio, no estoy intentando resolver ningún problema, solamente
estoy "jugando" con los decoradores y viendo de lo que son capaces. Y
mi pregunta surge desde ese interes.
- Y enlazando la frase anterior, gracias Txema por tu post, ya que
bien explicas para que son bueno los decoradores y para que no.

Ander.

P.D.: Perdón por el fallo ortográfico en el asunto del correo, me he
dado cuenta tarde de haber metido la pata. La costumbre...

El día 21 de octubre de 2013 18:48, Txema Vicente <txema en nabla.net> escribió:
> Buenas.
>
> Aunque puedas usar decoradores para ampliar la clase que decoran, yo no veo
> los decoradores como sustitutos de la herencia, ni ninguna reduccion de
> codigo.
>
> No necesitas decoradores para hacer eso, puedes asignar una funcion a un
> atributo de la clase (B.F = F). Ademas, como te pongas a crear clases
> decoradas que se amplian en ejecucion, a ver como lo explicas luego.
>
> Los decoradores vienen bien, por ejemplo, para "enchufar" funciones que van
> a manejar algo, como funciones que van a tratar los eventos de un GUI, o
> responder en una ruta URL @ruta("/admin"). Dependiendo de lo que quieras
> hacer, sera con una funcion o con una clase, con argumentos o sin ellos.
>
> Tambien tienes el decorador @classmethod por si quieres crear clases que
> puedan tener casos particulares (miclase = B.ampliada_con_F()), o actuar
> como "factoria" de clases.
> Y @staticmethod, que yo solo lo uso en raras ocasiones por motivos de
> organizacion de API.
>
> La herencia es algo claro y maravilloso que te permite organizar las cosas.
> El decorador es un "atajo del idioma" para trastear con las funciones, no
> hay nada que realmente no puedas hacer sin usarlo.
>
>
> El 21/10/2013 15:37, Ander Garmendia escribió:
>
> Buenas,
>
> estoy 'jugando' con decoradores y haciendo diferentes pruebas y tengo
> una duda que quizá alguien me pueda aclarar.
>
> Digamos que tenemos una clase ( llamemosla B ) a la que queremos
> añadir una funcionalidad (llamemosla F). El método clásico sería
> heredar desde la clase base ( B ) y crear una nueva clase ( llamemosla
> C ) que implementase nuestra funcionalidad ( F ). Hasta aquí todo
> normal y corriente.
>
> Ahora llega python y nos ofrece los decoradores, por lo tanto, podemos
> crear una clase decoradora ( llamemosla D ) que implemente la
> funcionalidad ( F ) y que decorando una clase ( volvamos a la clase B
> ), añade la funcionalidad F en la clase B sin necesidad de herencias
> de ningún tipo.
>
> Visto así, todo parece muy cómodo, se escribe menos código, hay menos
> clases implicadas, etc.
> Y como todo parece muy bonito, aquí surge mi duda: ¿Está esta practica
> extendida al escribir código en python ( es pythonico y aceptable ) ?
> ¿ o es mas una prueba conceptual ?
>
> Gracias de antemano y un saludo.
>
> Ander.
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>


Más información sobre la lista de distribución Python-es