Articles of decorator

Cómo registrar automáticamente una clase cuando está definida

Quiero tener una instancia de clase registrada cuando se define la clase. Lo ideal sería que el siguiente código hiciera el truco. registry = {} def register( cls ): registry[cls.__name__] = cls() #problem here return cls @register class MyClass( Base ): def __init__(self): super( MyClass, self ).__init__() Desafortunadamente, este código genera el error NameError: global […]

Python agrega dinámicamente el decorador a los métodos de clase al decorar la clase

di que tengo una clase class x: def first_x_method(self): print ‘doing first_x_method stuff…’ def second_x_method(self): print ‘doing second_x_method stuff…’ y este decorador class logger: @staticmethod def log(func): def wrapped(*args, **kwargs): try: print “Entering: [%s] with parameters %s” % (func.__name__, args) try: return func(*args, **kwargs) except Exception, e: print ‘Exception in %s : %s’ % (func.__name__, […]

Multihilo para Python Django

Algunas funciones deben ejecutarse de forma asíncrona en el servidor web. El envío de correos electrónicos o el posprocesamiento de datos son casos de uso típicos. ¿Cuál es la mejor manera (o la mayoría de las formas pythonicas) de escribir una función decoradora para ejecutar una función de forma asíncrona? Mi configuración es común: Python, […]

Registrar automáticamente los métodos de clase utilizando el decorador.

Quiero poder crear un decorador de Python que automáticamente “registre” los métodos de clase en un repository global (con algunas propiedades). Código de ejemplo: class my_class(object): @register(prop1,prop2) def my_method( arg1,arg2 ): # method code here… @register(prop3,prop4) def my_other_method( arg1,arg2 ): # method code here… Quiero que cuando se complete la carga, en algún lugar habrá […]

Tarea de apio y personalizadora decoradora.

Estoy trabajando en un proyecto usando django y apio (django-apio). Nuestro equipo decidió envolver todo el código de acceso a datos dentro de (app-name)/manager.py (NO envolverlo en Administradores como a la manera de django ), y dejar que el código (nombre-aplicación) /task.py se ocupe de ensamblar y realizar tareas con apio (por lo que no […]

Error del decorador: el objeto NoneType no es invocable

Escribí una función de decorador como esta: def tsfunc(func): def wrappedFunc(): print ‘%s() called’ % func.__name__ return func() return wrappedFunc() @tsfunc def foo(): pass foo() # to get it work, use foo instead of foo() foo() Me llegó el siguiente mensaje de error: foo() called Traceback (most recent call last): File “decorator.py”, line 11, in […]

Sugerencias tipo Python 3 para decorador.

Considere el siguiente código: from typing import Callable, Any TFunc = Callable[…, Any] def get_authenticated_user(): return “John” def require_auth() -> Callable[TFunc, TFunc]: def decorator(func: TFunc) -> TFunc: def wrapper(*args, **kwargs) -> Any: user = get_authenticated_user() if user is None: raise Exception(“Don’t!”) return func(*args, **kwargs) return wrapper return decorator @require_auth() def foo(a: int) -> bool: return […]

Adjuntar un decorador a todas las funciones dentro de una clase

Realmente no necesito hacer esto, pero me preguntaba si existe una forma de vincular a un decorador con todas las funciones dentro de una clase de forma genérica, en lugar de hacerlo explícitamente para cada función. Supongo que luego se convierte en una especie de aspecto, más que en un decorador y se siente un […]

Obteniendo nombres de parámetros de métodos en Python

Dada la función de Python: def aMethod(arg1, arg2): pass ¿Cómo puedo extraer el número y los nombres de los argumentos. Es decir, dado que tengo una referencia a func, quiero que la función [algo] regrese (“arg1”, “arg2”). El escenario de uso para esto es que tengo un decorador, y deseo usar los argumentos del método […]

Creando un singleton en Python

Esta pregunta no es para la discusión de si el patrón de diseño de singleton es deseable o no, es un antipatrón, o para cualquier guerra religiosa, sino para discutir cómo este patrón se implementa mejor en Python de tal manera que sea la más python. En este caso, defino que “la mayoría de los […]