Articles of decorador

¿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 * […]

Python: método regular y método estático con el mismo nombre

Introducción Tengo una clase de Python, que contiene una serie de métodos. Quiero que uno de esos métodos tenga una contraparte estática, es decir, un método estático con el mismo nombre, que pueda manejar más argumentos. Después de algunas búsquedas, he descubierto que puedo usar el decorador @staticmethod para crear un método estático. Problema Para […]

Encontrar los parámetros de una función en Python

Quiero poder preguntar al método __init__ una clase cuáles son sus parámetros. El enfoque directo es el siguiente: cls.__init__.__func__.__code__.co_varnames[:code.co_argcount] Sin embargo, eso no funcionará si la clase tiene decoradores. Le dará la lista de parámetros para la función devuelta por el decorador. Quiero llegar al método __init__ original y obtener esos parámetros originales. En el […]

Ruta a view_func con los mismos decoradores “matraz”

Supongamos que tengo estas rutas: app.add_url_rule(‘/’, view_func=index, methods=[‘GET’]) app.add_url_rule(‘login’, view_func=login, methods=[‘GET’, ‘POST’]) @validate_access() def index(): #…… @validate_access() def login(): #…… Tengo 2 puntos finales con el mismo decorador “@validate_access”. Cuando ejecuto este código me dieron AssertionError: View function mapping is overwriting an existing endpoint function: wrapperAssertionError: View function mapping is overwriting an existing endpoint function: […]

Cómo hacer que un decorador de python funcione en Flask con argumentos (para autorización)

Usé un fragmento de matraz para mi inicio de sesión en el matraz que verifica que un usuario haya iniciado sesión: from functools import wraps def logged_in(f): @wraps(f) def decorated_function(*args, **kwargs): if session.get(‘logged_in’) is not None: return f(*args, **kwargs) else: flash(‘Please log in first.’, ‘error’) return redirect(url_for(‘login’)) return decorated_function Y decoro vistas así: @app.route(‘/secrets’, methods=[‘GET’, […]

Frasco: Decorador para verificar el esquema de JSON y JSON

Tengo una aplicación de matraz con llamadas que esperan la carga de JSON. Antes de procesar cada llamada, tengo un proceso de comprobación de errores de 2 pasos: Afirmar que la carga útil es un JSON válido Afirmar que la carga útil de JSON cumple con un esquema específico Que se implementa de la siguiente […]

Functools.update_wrapper () no funciona correctamente

Utilizo Functools.update_wrapper() en mi decorador, pero parece que update_wrapper reescribe solo los atributos de la función (como __doc__ , __name__ ), pero no afecta la función help() . Soy consciente de estas respuestas , pero no funcionan con la clase decoradora. Aquí está mi función. import functools class memoized(object): def __init__(self, func): self.func = func […]

Java: memorización automática

Tengo algunas funciones en mi código en las que tiene mucho sentido (parece incluso obligatorio) usar la memorización. No quiero implementar eso manualmente para cada función por separado. ¿Hay alguna forma (por ejemplo, como en Python ) puedo usar una anotación o hacer otra cosa para obtener esto automáticamente en las funciones donde lo deseo?