Articles of decorador de

Ejecución de la función decoradora Python.

Tengo debajo del código de demostración del decorador. Si lo ejecuto sin llamar explícitamente greet función de greet , está ejecutando print statement de print dentro de la función de decorador y genera un Inside decorator . No puedo entender este comportamiento de decorador. ¿Cómo se llama el time_decorator incluso si no he llamado la […]

decoradores alternativos

¿Cuál es la mejor manera de encender y apagar a los decoradores sin ir a cada decoración y comentarlos? Digamos que tienes un decorador de benchmarking: # deco.py def benchmark(func): def decorator(): # fancy benchmarking return decorator y en tu módulo algo como: # mymodule.py from deco import benchmark class foo(object): @benchmark def f(): # […]

Cómo agrupar decoradores en Python

En Flask estoy usando un conjunto de decoradores para cada ruta, pero el código es “feo”: @app.route(“/first”) @auth.login_required @crossdomain(origin=’*’) @nocache def first_page: …. @app.route(“/second”) @auth.login_required @crossdomain(origin=’*’) @nocache def second_page: …. Preferiría tener una statement que los agrupe a todos con un solo decorador: @nice_decorator(“/first”) def first_page: …. @nice_decorator(“/second”) def second_page: …. Intenté seguir la respuesta […]

Crear decorador que pueda ver el método de clase actual.

¿Puedes crear un decorador dentro de una clase que vea los métodos y las variables de las clases? El decorador aquí no ve: self.longcondition () class Foo: def __init__(self, name): self.name = name # decorator that will see the self.longcondition ??? class canRun(object): def __init__(self, f): self.f = f def __call__(self, *args): if self.longcondition(): # […]

Python – decorator – intenta acceder a la clase padre de un método

Esto no funciona: def register_method(name=None): def decorator(method): # The next line assumes the decorated method is bound (which of course it isn’t at this point) cls = method.im_class cls.my_attr = ‘FOO BAR’ def wrapper(*args, **kwargs): method(*args, **kwargs) return wrapper return decorator Los decoradores son como la película Inception; Cuanto más niveles vayas, más confusos serán. […]

Análisis de args y kwargs en decoradores.

Tengo una función que toma args y kwargs, y necesito hacer algo en mi decorador basado en el valor del 2do arg en la función, como en el siguiente código: def workaround_func(): def decorator(fn): def case_decorator(*args, **kwargs): if args[1] == 2: print(‘The second argument is a 2!’) return fn(*args, **kwargs) return case_decorator return decorator @workaround_func() […]

Argumento opcional del decorador Python

from functools import wraps def logged(func): @wraps(func) def with_logging(*args, **kwargs): print func.__name__ + ” was called” return func(*args, **kwargs) return with_logging @logged def f(x): “””does some math””” return x + x * x print f.__name__ # prints ‘f’ print f.__doc__ # prints ‘does some math’ Dado este código de ejemplo, ¿cómo podría hacer @logged(variable) ? […]

¿Los decoradores de Python se ejecutan antes de que se llame la función que está decorando?

Como ejemplo, def get_booking(f=None): print “Calling get_booking Decorator” def wrapper(request, **kwargs): booking = _get_booking_from_session(request) if booking == None: # we don’t have a booking in our session. return HttpRedirect(‘/’) else: return f(request=request, booking=booking, **kwargs) return wrapper @get_booking def do_stuff(request, booking): # do stuff here El problema que tengo es que se llama al decorador @get_booking […]

¿Cómo cambiar el retorno de una función con un decorador en python?

Quiero crear un decorador para cambiar el valor de retorno de una función de esa manera. ¿Cómo hacerlo así ?: def dec(func): def wrapper(): #some code… #change return value append ‘c’:3 return wrapper @dec def foo(): return {‘a’:1, ‘b’:2} result = foo() print result {‘a’:1, ‘b’:2, ‘c’:3}

Modificar la función en el decorador.

Estaba pensando en hacer un decorador con el fin de boost el rendimiento. Un decorador que modifica el código fuente de la función que decora y devuelve la función modificada. Mientras pensaba esto, pensé que si podía obtener el código fuente de la función, podría hacer esto. Pero, ¿es posible acceder al código fuente de […]