El 3 de febrero de 2010 23:51, Juanjo Conti <jjconti@gmail.com> escribió:
El día 3 de febrero de 2010 23:06, Marcelo Rinesi
<marcelo.rinesi@gmail.com> escribió:
>
> Una pregunta: ¿es posible decorar funciones "por default" de una
> manera más o menos elegante? Por ejemplo, hacer algo de manera tal que
> a toda función que uno defina se le aplique automáticamente el
> decorador monad_aware. (No digo que sea una buena idea hacerlo, o
> siquiera que quiera hacerlo, pero al menos desde un punto de vista
> teórico, la posibilidad de hackear de manera más implícita el
> mecanismo de aplicación de funciones suena bastante interesante.)
>

Al final de tu módulo, donde tenés las funciones que querés decorar
automáticamente, podés hacer:

import inspect
from monads import monad_aware

for n,v in locals().items():
   if inspect.isfunction(v) and n != 'monad_aware':    # la segunda
condicion es para no aplicar el decorador al decorador
       locals()[n] = monad_aware(v)

No está probado, pero creo que debería funcionar.


Parece que anda :)

El ejemplo está muy bueno para los que están empezando con Python y quieren ver qué cosas uno puede llegar a hacer, cosas que al desconocerla un diría que son mágicas ;-)

Dejo un post explicándolo http://www.juanjoconti.com.ar/2010/02/06/aplicar-un-decorador-a-todas-las-funciones-de-un-modulo-en-python/

Saludos!
--
Juanjo Conti
blog: http://www.juanjoconti.com.ar