[Python-Dev] method decorators (PEP 318)

Bernhard Herzog bh at intevation.de
Sat Mar 27 12:39:25 EST 2004


"Jewett, Jim J" <jim.jewett at eds.com> writes:

> Guido van Rossum:
>
>> ... for decorators spelled with a single word, like classmethod,
>> ... as early as reasonable in the function definition
>
>>    def foobar(cls, blooh, blah) [classmethod]:
>
>> hides a more important fact for understanding it (classmethod) behind
>> some less important facts (the argument list).  I would much rather
>> see this:
>
>>    def foobar [classmethod] (cls, blooh, blah):
>
> One alternative placed it earlier still, in a second header clause.
>
>     using:
>         classmethod
>     def foobar(cls, blooh, blah):
>         pass

Has somebody suggested the following yet?

    def [classmethod] foo(cls, blooh, bla):
        pass

or for a longer list of decorators

    def [classmethod, 
         attributes(deprecated=True)
        ] foo(cls, blooh, bla):
        pass


It might be more readable if a newline were allowed between the closing
] and the function name:

    def [classmethod, attributes(deprecated=True)]
        foo(cls, blooh, bla):
        pass


Putting the decorators between the "def" and the function name has some
advantages over the proposals I've seen so far:

    - crucial information about the function and the meaning of the
      parameters is given very early (this was an argument made for
      putting the decorat before the argument list)

    - The name and the argument are together, so it still looks similar
      to the function invocation (an argument made for putting the
      decorators after the function list).

If the decorators come before the function name, the decorators should
perhaps be applied in reverse order so that 

  def [classmethod, deprecated] foo(cls, bar):
      pass

is similar to

  def foo(cls, bar):
      pass
  foo = classmethod(deprecated(foo))



  Bernhard


-- 
Intevation GmbH                                 http://intevation.de/
Skencil                                http://sketch.sourceforge.net/
Thuban                                  http://thuban.intevation.org/



More information about the Python-Dev mailing list