How to add a Decorator to a Class Method
gregpinero at gmail.com
gregpinero at gmail.com
Tue Nov 20 13:32:39 EST 2007
On Nov 20, 2:05 am, Marc 'BlackJack' Rintsch <bj_... at gmx.net> wrote:
> On Mon, 19 Nov 2007 20:59:51 -0800, gregpin... at gmail.com wrote:
> > How do I add a decorator to a class method? Here's what I want to do,
> > but I guess my syntax isn't right. Any advice?
>
> > class A:
> > def pre(self,fn):
> > def new_func(*args,**kwargs):
> > print 'hi'
> > fn(*args,**kwargs)
> > return new_func
> > @self.pre
>
> At this point there is no `self` which is exactly what the exception says
> if you run this. This method definition executed at class definition time
> so there is no instance of `A`. You can't change it to `... at A.pre`` either
> because the class is not fully constructed yet so the class name `A` does
> not exist yet. So you have to move `pre()` out of the class.
>
> def pre(fn):
> def new_func(*args, **kwargs):
> print "'hi'"
> fn(*args, **kwargs)
> return new_func
>
> class A(object):
> @pre
> def func(self, a, b):
> print a + b
>
> a = A()
> a.func(3, 5)
>
> Ciao,
> Marc 'BlackJack' Rintsch
Thanks those answers make sense. But for this function if defined
outside the class:
> def pre(fn):
> def new_func(*args, **kwargs):
> print "'hi'"
> fn(*args, **kwargs)
> return new_func
Can new_func reference self? Would self just be one of the args?
-Greg
More information about the Python-list
mailing list