Articles of python decorators

Decoradores de métodos de instancia

Envolver el método de una clase en un decorador de Python “repetitivo” tratará ese método como una función regular y hará que pierda su atributo __self__ que se refiere al objeto de instancia de clase. ¿Se puede evitar esto? Toma la siguiente clase: class MyClass(object): def __init__(self, a=1, b=2): self.a = a self.b = b […]

Jython @property SyntaxError: entrada ” no coincidente que espera CLASS

Intenté ejecutar este ejemplo desde los documentos en el intérprete de Jython: http://www.jython.org/docs/library/functions.html class C(object): def __init__(self): self._x = None @property def x(self): “””I’m the ‘x’ property.””” return self._x @x.setter def x(self, value): self._x = value @x.deleter def x(self): del self._x Con solo ingresar las primeras 4 líneas (hasta e incluyendo @property ) se obtiene […]

Descriptores / decoradores de anidación en python

Me cuesta entender lo que sucede cuando bash anidar descriptores / decoradores. Estoy usando python 2.7. Por ejemplo, tomemos las siguientes versiones simplificadas de property y classmethod : class MyProperty(object): def __init__(self, fget): self.fget = fget def __get__(self, obj, objtype=None): print ‘IN MyProperty.__get__’ return self.fget(obj) class MyClassMethod(object): def __init__(self, f): self.f = f def __get__(self, […]

Decorador de Python para mantener la firma y el atributo definido por el usuario.

Tengo mi decorador simple my_decorator que decora my_func . def my_decorator(func): def wrapper(*args, **kwargs): return func(*args, **kwargs) wrapper._decorator_name_ = ‘my_decorator’ return wrapper @my_decorator def my_func(x): print(‘hello %s’%x) my_func._decorator_name_ ‘my_decorator’ Hasta aquí las cosas funcionan, pero no puedo ver la firma real de la función. my_func? Signature: my_func(*args, **kwargs) Docstring: File: ~/ Type: function Si decoro […]

Compruebe si una función utiliza @classmethod

TL; DR ¿Cómo puedo saber si una función se definió usando @classmethod o algo con el mismo efecto? Mi problema Para implementar un decorador de clase me gustaría verificar si un método toma a la clase como su primer argumento, por ejemplo, como se logra a través de @classmethod def function(cls, …): Encontré una solución […]

Cómo usar un administrador de contexto dentro de un decorador y cómo pasar un objeto creado en decorador a función decorada

Tengo una clase de prueba que requiere hacer un poco de limpieza al final. Para asegurarme de que el usuario no se olvide de hacer esto, quiero agregar un administrador de contexto a la clase. También tengo un decorador, dentro del cual quiero usar este administrador de contexto para crear un objeto de clase de […]

Python functools lru_cache con métodos de clase: lanzar objeto

¿Cómo puedo usar functools ‘lru_cache dentro de las clases sin pérdida de memoria? En el siguiente ejemplo mínimo, la instancia foo no se lanzará aunque salga del ámbito y no tenga referencia (aparte de lru_cache). from functools import lru_cache class BigClass: pass class Foo: def __init__(self): self.big = BigClass() @lru_cache(maxsize=16) def cached_method(self, x): return x […]

Decorador Python para cronometrar funciones recursivas.

Tengo un decorador simple para rastrear el tiempo de ejecución de una llamada de función: def timed(f): def caller(*args): start = time.time() res = f(*args) end = time.time() return res, end – start return caller Esto se puede usar de la siguiente manera, y devuelve una tupla del resultado de la función y el tiempo […]

Compruebe si una función fue llamada como decorador

En el siguiente ejemplo mínimo, decorate se llama dos veces. Primero usando @decorate , segundo por función normal call decorate(bar) . def decorate(func): print(func.__name__) return func @decorate def bar(): pass decorate(bar) ¿Es posible ver dentro de decorate si la llamada se invocó usando @decorate o como una llamada de función normal?

No se puede llamar a un decorador dentro de la subclase importada de una aplicación cherrpy (árbol de sitio)

Estoy utilizando cherrypy como servidor web y quiero verificar el estado de inicio de sesión de un usuario antes de devolver la página. Esto funciona con los métodos en la clase de aplicación principal (en site.py ) pero da un error cuando llamo a la misma función decorada en el método en una clase que […]