[Python-Dev] Re: metaclass and author are already decorators (original) (raw)

"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