Purely emotional perspective

Peter Hansen peter at engcorp.com
Mon Aug 9 14:07:07 EDT 2004


Heiko Wundram wrote:

> Am Montag, 9. August 2004 18:03 schrieb Peter Hansen:
> 
>>After a while, when everyone is used to decorators, it won't
>>be important to have them way out front like that, and they
>>could just as well, and perhaps more readably (at that time),
>>be moved to after the def.
> 
> I don't think this is true... Decorators are not simply "meta-data" that is 
> attached to a function, they change the functions behaviour. As such, they 
> create a different function than the one which is declared.
> 
> Consider:
> class x(object):
> 	def y(some,arg):
> 		@ somedecorator
> 		<blah>
> 
> Versus:
> 
> class x(object):
> 	@ somedecorator
> 	def y(some,arg):
> 		<blah>
> 
> Now, say you folded out the body of x with some form of decent editor. In the 
> first example, @somedecorator disappears, as it is part of the function body, 

Actually, the first example could just as well have been this:

def y(some, arg)
     @ somedecorator
     :
     <blah>

But I can just hear the arguments against that, much as I like it.

> in the second example, it stays in (and I wouldn't want an editor to fold out
> the decorating statements for a function, and it would be kind'a hard to have
> a sensible way for the editor to display the first few lines decorating the 
> function inside the function body while the function is folded out).

I *would* like decorators to be folded, I think, if I were in the habit
of using folding editors.  But I'm fairly sure it wouldn't be hard to
avoid folding @ lines that immediately follow the :, or for that matter
that come just before it.  The real issue here (not that it bothers me)
is that a lot of editors are probably tied to the idea that the : comes
right after the argument list or something, so they probably would have
to be redone to handle pre-colon decorators.

> The docstring of a function actually is only meta-data (in my taste), and thus 
> should remain inside the function definition.

This argument makes no sense to me.  Why should any meta-data be inside
the function body?  There should probably be one place where all
meta-data is defined, and it should be used consistently for everything,
docstrings included.  (The pie-syntaxians are heading that way, it
seems.)

> When and how decorators do something to the method is unimportant to my taste 
> (they are executed after the function definition has been executed), but 
> visibly seeing that the decorator is being applied to the function is much 
> easier for the second syntax.

To tell the truth, I think I prefer the current approach, where the
function is clearly, explicitly decorated *after* it has been defined,
and no new syntax is required.

Python is clearly on a huge evolutionary surge and conservative views
on the matter are definitely not winning out right now.  And the usual
argument (submit a patch!) doesn't really work when those who want to
avoid many changes try it... I've been *not* submitting a patch on
lots of changes to Python, but somehow it's never been accepted. ;-)

-Peter



More information about the Python-list mailing list