[Python-Dev] Semantics of decorators? (original) (raw)

Phillip J. Eby pje at telecommunity.com
Wed Aug 11 18:22:04 CEST 2004


At 11:05 AM 8/11/04 -0400, Edward C. Jones wrote:

In the development docs, Python Reference Manual, 7.5, it says:

A function definition may be wrapped by one or more decorator expressions. Decorator expressions are evaluated when the function is defined, in the scope that contains the function definition. The result must be a callable, which is invoked with the function object as the only argument. The returned value is bound to the function name instead of the function object. If there are multiple decorators, they are applied in reverse order. Does this completely describe the semantics of decorators?

It should also be noted that when the decorator expressions are applied, the function has not yet been bound to its name in the appropriate scope. Thus, if there is a previous binding of that name in the scope, the decorator expression may be able to access it.

This aspect of the semantics is important for additive decorators like Ed Loper's 'property_getter' and 'property_setter', or my generic function decorators. E.g.:

 @property_getter
 def foo(self):
     return self.__foo

 @property_setter
 def foo(self,value):
     self.__foo = value

 # etc.

Python-Dev mailing list Python-Dev at python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/pje%40telecommunity.com



More information about the Python-Dev mailing list