Articles of decorador

Implementando una propiedad de clase que preserva la cadena de documentos.

Tengo un descriptor que convierte un método en una propiedad en el nivel de clase: class classproperty(object): def __init__(self, getter): self.getter = getter self.__doc__ = getter.__doc__ def __get__(self, instance, owner): return self.getter(owner) Utilizado de esta manera: class A(object): @classproperty def test(cls): “docstring” return “Test” Sin embargo, ahora no puedo acceder al atributo __doc__ (lo cual […]

Python: pasar los valores predeterminados de los argumentos de la función a * args o ** kwargs

Considere el ejemplo: def decorator(func): def wrapper(*args, **kwargs): print(args, kwargs) func(*args, **kwargs) return wrapper @decorator def foo(x, y, z=0): pass foo(5, 5) Salida: (5, 5) {} ¿Por qué no (5, 5) {‘z’: 0} ? ¿Cómo pasar todos los valores predeterminados de la función foo a *args o **kwargs usando solo decorator (para funciones) o metaclase […]

Python decorator @func (). Error de syntax de atributo

Traté de encontrar una respuesta aquí, pero no pude. @obj.func # works @obj.func(**kwargs) #works @obj.func1(**kwargs).func2 #-> syntax error No entiendo por qué la tercera forma es un SyntaxError, me parece que no está violando ninguna syntax de python y está claro para mí qué quiere hacer el usuario (vea el ejemplo a continuación). Miré el […]

Combina dos decoradores de python en uno

Aquí hay dos decoradores que me gustaría combinar ya que son bastante similares, la diferencia es cómo se maneja un usuario no autenticado. Preferiría tener un solo decorador al que pueda llamar con una discusión. # Authentication decorator for routes # Will redirect to the login page if not authenticated def requireAuthentication(fn): def decorator(**kwargs): # […]

¿Cómo funcionan las funciones decoradas en matraz / python? (app.ruta)

Edición 2: entendí mal cómo trabajan los decoradores. El decorador se ejecuta incluso si no se llama a la función decorada (aunque es posible que no vea sus efectos). function = dec (function) sería una forma equivalente de mostrar lo que hace un decorador y, obviamente, en ese escenario, la función dec () se ejecuta […]

Pasando un parámetro al decorador en python.

¿Por qué este decorador con un parámetro no funciona? def decAny( f0 ): def wrapper( s0 ): return ” %s ” % ( any, f0(), any ) return wrapper @decAny( ‘xxx’ ) def test2(): return ‘test1XML’ print( test2() ) siempre me da un error que dice que “la cadena no es invocable” está intentando ejecutar […]

Método de establecimiento de decorador de propiedad no se llama

Estoy tratando de usar un método de propiedad para establecer el estado de una instancia de clase, con la siguiente definición de clase: class Result: def __init__(self,x=None,y=None): self.x = float(x) self.y = float(y) self._visible = False self._status = “You can’t see me” @property def visible(self): return self._visible @visible.setter def visible(self,value): if value == True: if […]

¿Python3 decorando condicionalmente?

¿Es posible decorar una función basada en una condición? a’la: if she.weight() == duck.weight(): @burn def witch(): pass Me pregunto si podría usarse la lógica (¿cuándo se llama a la witch ?) Para averiguar si decorar a la witch con @burn ? Si no, ¿es posible crear una condición dentro del decorador con el mismo […]

__ decorado__ para decoradores de python

A partir de 2.4 (2.6 para las clases), python te permite decorar una función con otra función: def d(func): return func @d def test(first): pass Es un azúcar sintáctico conveniente. Puedes hacer todo tipo de cosas bonitas con decoradores sin hacer un desastre. Sin embargo, si desea averiguar la función original que se decoró, debe […]

Argumentos decoradores de la clase Python

Estoy tratando de pasar argumentos opcionales a mi decorador de clase en Python. Debajo del código que tengo actualmente: class Cache(object): def __init__(self, function, max_hits=10, timeout=5): self.function = function self.max_hits = max_hits self.timeout = timeout self.cache = {} def __call__(self, *args): # Here the code returning the correct thing. @Cache def double(x): return x * […]