[Python-Dev] def ... decorate

Jack Diederich jack at performancedrivers.com
Fri Aug 13 23:31:00 CEST 2004


On Fri, Aug 13, 2004 at 02:51:37PM -0500, Skip Montanaro wrote:
> 
> I understand that not everyone will like every idea and that in this
> particular arena it seems that no one idea is acceptable to everyone, but
> can we return to my proposal and discuss its pros and cons?  I didn't pick
> the example out of thin air.  I cast an existing example from c.l.py in this
> form (thus the function name and somewhat unusual collection of decorator
> names).  The only thing I added besides the syntax change was to identify
> where I thought the docstring should go.
> 
>     def p_statement_expr:
>         staticmethod
>         grammarrule('statement : expression')
>         version("Added in 2.4")
>         deprecatedmethod
>         type_(None)
>     decorate (self, p):
>         """docstring here"""
>         print p[1]
>
> I understand that it has obvious weaknesses as well:
> 
>     * It separates the function name from its parameter list.  That does
>       allow us to aboid parsing ambiguities though.
This is huge, it would mean two ways to do it.  When I want to decorate the
function with '@'  I add an extra line above the existing definition.
With this suggestion I have to pick the line apart and shuffle stuff around.
Guido has said being able to add/remove a decorator should be as simple as
cut/pasting a line and I agree.

>     * It can't readily be extended to class definitions, though the demand
>       for that seems minor and mostly argued for symmetry reasons.
Class decorators are pretty important to me.  I would replace most of my meta
class usages with decorators.  I care enough I spent two days writing a patch
and fishing through the bowels of compile.c (*plug plug*).

* It uses a suite in a way different from all other suites.

A group of points
* it breaks grepability badly
* it breaks existing tools by radically changing the grammar
* breaking machine tools also means breaking meat tools.  I now have to fit
  two ways of recognizing functions in my head all the time.  This is the
  showstopper of all showstoppers right there.

-Jack


More information about the Python-Dev mailing list