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, […]
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 […]
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”) […]
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’ […]
¿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, […]
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, […]
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é 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 […]
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 […]
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 […]