How to add a Decorator to a Class Method

Jeff McNeil jeff at jmcneil.net
Tue Nov 20 06:22:47 CET 2007


Think about the context in which your function definition is executed and
how the 'self' parameter is implemented.   Your definitions (and decorator
calls) are executed in the context of 'class A.'

That said, the following would work:

>>> class A:
    def pre(fn):
        def new_func(*args,**kwargs):
            print 'hi'
            fn(*args,**kwargs)
        return new_func
    @pre
    def func(self,a,b):
        print a+b

>>> A().func(1,2)
hi
3
>>>


On 11/19/07, gregpinero at gmail.com <gregpinero 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
>     def func(self,a,b):
>         print a+b
>
> Should result in:
> >>> a = A()
> >>> a.func(3,5)
> 'hi'
> 8
>
> Thanks,
>
> -Greg
> --
> http://mail.python.org/mailman/listinfo/python-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20071120/eb38ecb3/attachment.html>


More information about the Python-list mailing list