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@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/



_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a