[Python-Dev] Re: __metaclass__ and __author__ are already
decorators
"Martin v. Löwis"
martin at v.loewis.de
Sun Aug 22 09:21:39 CEST 2004
Paul Morrow wrote:
>> The items you describe are not decorators, they are attributes. The
>> current syntax for decorators is 'x = decorator(x)'.
>>
>
> In today's Python that's of course true, but these 'attributes' are used
> to supply meta info about the class. They *describe* the class. They
> are never intended to be inherited by instances of the class. So in
> this sense, they are very much more like decorators than (normal) class
> attributes.
No, that makes them completely unlike function decorators. Function
decorators do not describe something, they modify something (namely,
the thing that is bound to the function's name).
Some attributes have a run-time meaning, like __metaclass__; others,
like __author__, have not. Unfortunately, the meaning of __metaclass__
is conceptually different from decorators: the metaclass is evaluated
*before* the class is constructed; the decorators are evaluated
*after* the function is constructed.
> So providing definitions for __xxx__ attributes is not done for the same
> purpose as the other attributes. They are special. Therefore, let's
> formally acknowledge that and call them 'decorators'.
I acknowledge that they are special, and call them "special attributes".
I won't call that decorators, because that means something else.
> 2. All magic methods in today's Python are invoked 'magically' (are
> called indirectly; not called directly by any user code).
Correct. For each special attribute, the interpreter needs advance
knowledge of the name of the attribute. Not so for decorators:
the interpreter does not need advance knowledge - you can define
your own function decorators, and Python will support them because
of the leading @.
Regards,
Martin
More information about the Python-Dev
mailing list