[Python-Dev] PEP 318 - check for consensus

Guido van Rossum guido at python.org
Wed Apr 14 12:30:30 EDT 2004

> The decorator discussion has gotten lively again, 
> and a summary would be a long list of options.

Really?  If feels pretty quiet here on python-dev.

> I'm hoping that at least some of the decisions are
> non-controversial.  If you have an opinion on the 
> following, please email me directly (to not clutter 
> the list).  If several people disagree (or some
> disagree strongly), I'll consider the issue still
> undecided.
> 	Issue 1:  When is the name bound?
> The current proposal is that the name does not get
> bound until after the final decorator is applied.
> This means that decorators do not have access to
> the function by its name.  
> They can learn the name, perhaps through sys._getframe, 
> but the name will not yet be bound, unless it happens
> to refer to an unrelated object.  (See issue two for
> a better way to get the name.)

A function's name is accessible through its __name__ attribute and
also as func_name.  I think that's quite enough. ;-)

> Does anyone feel strongly that the name should be 
> bound to the original function before decorators are
> applied?
> Does anyone feel strongly that the name should be
> bound to the result of each intermediate step, if
> there are multiple decorators?

No.  The function should not be bound until after all decorators have
been applied.

> 	Issue 2:  Restrictions on decorators
> The working assumption had been "any callable, which
> will be called with a single object as the argument"
> 	Issue 2a:  name of the entry point
> Is there a strong feeling (in any direction) about 
> calling the decorator's "decorate" or "__decorate__"
> attribute, rather than its "__call__" attribute?

It should be __call__; that's the only backwards compatible way, and
makes it easy to create decorators as functions.

> 	Issue 2b:  context available to decorators
> Would there be any objection to passing additional
> context as keywords?  
> decorate(object, name="myfunc")
> The obvious keywords are the name and the context's
> globals; decorators should probably accept arbitrary
> keywords for forward-compatibility.

That's unnecessary; see answer to #1.

--Guido van Rossum (home page: http://www.python.org/~guido/)

More information about the Python-Dev mailing list