manipulating class attributes from a decorator while the class is being defined

Christian Heimes lists at cheimes.de
Sat Apr 19 17:37:14 EDT 2008


Wilbert Berendsen schrieb:
> Hi, is it possible to manipulate class attributes from within a decorator 
> while the class is being defined?
> 
> I want to register methods with some additional values in a class attribute. 
> But I can't get a decorator to change a class attribute while the class is 
> still being defined. Something like:
> 
> class Parser(object):
>   
>   regexps = []
>   def reg(regexp):
>     def deco(func):
>       regexps.append((regexp, func))
>       return func
>     return deco
>   
>   @reg(r'".*"')
>   def quoted_string(self):
>     pass
> 
> How can I reach the class attribute `regexps' from within a decorator?

It's really tricky . The class object doesn't exists yet. It's created
after all functions are parsed and created. You have can walk up the
stack frames but it's ugly.

Christian




More information about the Python-list mailing list