[Python-Dev] Multiple decorators per line

Clark C. Evans cce at clarkevans.com
Mon Aug 23 21:09:53 CEST 2004


It seems that decorators solve two problems:
  - a way to move decoration close-to (or ideally on) the 'def' line
  - a way to specify N decorators together as a whole

While J2 seems nice, I'd rather see someone build a 'composite'
decorator as the function it really is, rather than introducing 
a new keyword:

    def composite(instance):
        return decorator_a(decorator_b(instance))
        
    def @composite func(args):
        """ function body """

By splitting these problems, the definition of the decorator can
be on the same line as the 'def' line, and the composite decorator
can be applied to more than one function.  Also, the operation of the
decorator is very obvious ... far less "deep magic".  

One could even use function arguments...

    def makeDecorator(use_a = False, use_b = True):
        retval = lambda instance: instance
        if use_a:
            retval = lambda instance: retval(decorator_a(instance))
        if use_b:
            retval = lambda instance: retval(decorator_b(instance))
        return retval
    
    composite = makeDecorator(use_a = True)
    def composite func(args):
        """ function body """

I suppose if one wanted more magic...


    def @makeDecorator(use_a = True) func(args):
        """ function body """

In short, I don't see a reason why this solution needs to solve #2, 
as regular functions should suffice.  Also, The problem is just #1

Cheers,

Clark


More information about the Python-Dev mailing list