Articles of decorador de

Decorar métodos por instancia en Python.

Supongo que tengo alguna clase simple class TestClass: def doSomething(self): print ‘Did something’ Me gustaría decorar el método doSomething , por ejemplo, para contar el número de llamadas class SimpleDecorator(object): def __init__(self,func): self.func=func self.count=0 def __get__(self,obj,objtype=None): return MethodType(self,obj,objtype) def __call__(self,*args,**kwargs): self.count+=1 return self.func(*args,**kwargs) Ahora esto cuenta el número de llamadas al método decorado, sin embargo, […]

Accediendo a la clase que posee un método decorado desde el decorador.

Estoy escribiendo un decorador para los métodos que deben inspeccionar los métodos de los padres (los métodos del mismo nombre en los padres de la clase en la que estoy decorando). Ejemplo (del cuarto ejemplo de PEP 318 ): def returns(rtype): def check_returns(f): def new_f(*args, **kwds): result = f(*args, **kwds) assert isinstance(result, rtype), \ “return […]

Usando la misma función como instancia y método de clase en Python

Uno puede hacer algo como esto: class master: @combomethod def foo(param): param.bar() # Param could be type as well as object class slaveClass( master ): @classmethod def bar(cls): print(“This is class method”) slaveType = slaveClass slaveType.foo() class slaveInstance( master ): def __init__(self, data): self.data = data def bar(self): print(“This is “+self.data+” method”) slaveType = slaveInstance(“instance”) […]

decorador de python para mostrar kwargs pasados ​​y predeterminados

Soy nuevo en python y decoradores y estoy perplejo al escribir un decorador que informa no solo de args y kwargs, sino también de los kwargs predeterminados que no han cambiado. Esto es lo que tengo hasta ahora. def document_call(fn): def wrapper(*args, **kwargs): print ‘function %s called with positional args %s and keyword args %s’ […]

¿Puedo usar un decorador para mutar el scope local de una función en Python?

¿Hay alguna forma de escribir un decorador de tal manera que lo siguiente funcione? assert ‘z’ not in globals() @my_decorator def func(x, y): print z EDIT: movido de anwser En respuesta al salto “¿por qué?”: Sintaxis sugar / DRY. No se trata del almacenamiento en caché, se trata de calcular z (y z1, z2, z3, […]

Cómo crear decorador en Django para decorar vista

Tengo vista: @decorator def func(request): hello = “hello” return render_to_responce(“test.html”, locals() ) y la plantilla test.html: {{ hello }} {{ username }} Quiero escribir decorator para func(request) , que agrega una variable, USERNAME, a la función y devuelve dos parámetros en la plantilla. Intenté hacerlo de la siguiente manera: def decorator(func): def wrapper( request, *args, […]

¿Existe un decorador en disco memoize establecido para python?

He estado buscando un módulo python que ofrece un decorador memoize con las siguientes capacidades: Almacena el caché en el disco para ser reutilizado entre las siguientes ejecuciones del progtwig. Funciona para cualquier argumento capaz de decaparse, lo que es más importante, una gran cantidad de matrices. (Bonus) verifica si los argumentos están mutados en […]

¿Por qué los decoradores de Python no pueden ser encadenados a través de definiciones?

¿Por qué no son los siguientes dos scripts equivalentes? (Tomado de otra pregunta: Entendiendo a los decoradores de Python ) def makebold(fn): def wrapped(): return “” + fn() + “” return wrapped def makeitalic(fn): def wrapped(): return “” + fn() + “” return wrapped @makebold @makeitalic def hello(): return “hello world” print hello() ## returns […]

Dentro de una clase decoradora, acceda a la instancia de la clase que contiene el método decorado

Tengo el siguiente decorador, que guarda un archivo de configuración después de @saveconfig un método decorado con @saveconfig : class saveconfig(object): def __init__(self, f): self.f = f def __call__(self, *args): self.f(object, *args) # Here i want to access “cfg” defined in pbtools print “Saving configuration” Estoy usando este decorador dentro de la siguiente clase. Después […]

¿Cómo diferenciar entre método y función en un decorador?

Quiero escribir un decorador que actúe de manera diferente dependiendo de si se aplica a una función o un método. def some_decorator(func): if the_magic_happens_here(func): # <—- Point of interest print 'Yay, found a method ^_^ (unbound jet)' else: print 'Meh, just an ordinary function :/' return func class MyClass(object): @some_decorator def method(self): pass @some_decorator def […]