Articles of decorator

Prácticas recomendadas para decoradores de Python, utilizando una clase frente a una función

Como lo he entendido, hay dos formas de hacer un decorador de Python, ya sea usar el __call__ de una clase o definir y llamar a una función como decorador. ¿Cuáles son las ventajas / desventajas de estos métodos? ¿Hay un método preferido? Ejemplo 1 class dec1(object): def __init__(self, f): self.f = f def __call__(self): […]

¿Para qué son útiles las metaclases de Python?

¿Qué se puede hacer con las metaclases que no pueden ser de otra manera? Alex Martelli dijo que hay tareas que no se pueden lograr sin las metaclases. ¿Qué son las metaclases de Python y los decoradores de clase que me gustaría saber cuáles son?

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?

Decorador de la propiedad clase perezosa

Tengo un modelo de django que necesita hacer algún procesamiento refiriendo el modelo de usuario personalizado. No puedo trabajar con la clase de este modelo en el momento de carga de la clase porque se desconoce el orden de carga de las clases. Así que necesito agregar algunos atributos de clase en tiempo de ejecución, […]

¿Cómo hago para que los decoradores basados ​​en clases trabajen con métodos de ejemplo?

Hay dos formas de invocar a los decoradores: 1) pasando la función / clase del decorador class Foo(object): def __init__(self): self.x = 1 @foo_decorator def bar(self, x): return self.x + x o 2) pasando el valor de retorno de la función decoradora / instancia de clase. class Foo(object): def __init__(self): self.x = 1 @foo_decorator(“args”) def […]

Python establece la cadena de documentación y obtiene el nombre del método del método de clase generado dinámicamente

Intento obtener / establecer el nombre y la cadena de documentación de los métodos de clase creados dinámicamente de la siguiente manera, pero tengo problemas para averiguar exactamente cómo hacerlo: import sys import inspect class test(object): pass @classmethod def genericFunc(cls, **kwargs): print “function:”, (inspect.stack()[0][3]) print “kwargs:”, kwargs function_list = [‘myF1’, ‘myF2’] for func in function_list: […]

Creando un objeto con nombre doble usando solo un subconjunto de argumentos pasados

Estoy extrayendo filas de una base de datos MySQL como diccionarios (usando SSDictCursor) y estoy procesando un poco, usando el siguiente enfoque: from collections import namedtuple class Foo(namedtuple(‘Foo’, [‘id’, ‘name’, ‘age’])): __slots__ = () def __init__(self, *args): super(Foo, self).__init__(self, *args) # …some class methods below here class Bar(namedtuple(‘Bar’, [‘id’, ‘address’, ‘city’, ‘state’]): __slots__ = () […]

Se omiten todas las pruebas de unidad, pero una en Python mediante el uso de decoradores y metaclases

Estoy escribiendo pruebas unitarias para una MCU que comunica los comandos a través del puerto USB y verifica su respuesta. Si una prueba de unidad falla, tiene sentido para mí hacer un poco de depuración en la MCU. Por lo tanto, me gustaría deshabilitar todas las pruebas de unidad, excepto la que me gustaría depurar […]

¿Cómo escribo un decorador para mi vista Django / Python?

Aquí está mi opinión. Básicamente, devuelve diferentes Respuestas en función de si ha iniciado sesión o no. @check_login() def home(request): if is_logged_in(request): return x else: return y Aquí está mi código de decorador. Solo quiero comprobar si la solicitud tiene encabezados, y si es así, inicie sesión. #decorator to log the user in if there […]

Ámbito de variables en el decorador python.

Tengo un problema muy raro en un decorador de Python 3. Si hago esto: def rounds(nr_of_rounds): def wrapper(func): @wraps(func) def inner(*args, **kwargs): return nr_of_rounds return inner return wrapper funciona bien Sin embargo, si hago esto: def rounds(nr_of_rounds): def wrapper(func): @wraps(func) def inner(*args, **kwargs): lst = [] while nr_of_rounds > 0: lst.append(func(*args, **kwargs)) nr_of_rounds -= 1 […]