Esto es python 2.5, es GAE también no es que importe.Decorando métodos de clase de python, ¿cómo paso la instancia al decorador?
Tengo el siguiente código, estoy decorando el método foo() en la barra, usando la clase dec_check como decorador.
class dec_check(object):
def __init__(self, f):
self.func = f
def __call__(self):
print 'In dec_check.__init__()'
self.func()
class bar(object):
@dec_check
def foo(self):
print 'In bar.foo()'
b = bar()
b.foo()
Cuando se ejecuta esta Tenía la esperanza de ver:
In dec_check.__init__()
In bar.foo()
Pero estoy "TypeError: foo() takes exactly 1 argument (0 given)
" como .foo()
, siendo un método de objeto, toma a sí mismo como un argumento. Supongo que el problema es que la instancia de bar
no existe cuando estoy ejecutando el código del decorador.
Entonces, ¿cómo paso una instancia de bar
a la clase de decorador?
Cambie la línea 'f (self)' a 'return f (self)' para pasar la devolución de 'foo' de vuelta a la persona que llama. – j6m8
Enlace roto a la página del descriptor. – Apteryx