[Python-3000] Metaclasses in Py3K
Phillip J. Eby
pje at telecommunity.com
Sun Dec 17 03:10:22 CET 2006
At 12:53 PM 12/17/2006 +1300, Greg Ewing wrote:
>The main use case for all this seems to be that
>some metaclasses would like to know the order in
>which attributes were defined. So here's an
>alternative proposal: Leave the syntax the way it
>is, and *always* use a specialised dict that
>remembers the order of definition. The metaclass
>can then use that information or ignore it as it
>wishes.
Pro: ordered dicts are an often-requested feature anyway
Con: doesn't allow errors to occur at the line where they really are
IOW, a metaclass that validates assignments can't complain about a bad
value at the point where it's assigned. This is an annoyance now because
an error occurring in the metaclass __init__ or __new__ looks like it's
happening at the 'class' statement currently.
So, if we have to have some kind of special dictionary-like thing, I prefer
using one that sets attributes on the class object, as this allows you to
catch errors at the line where they occur, in the body of the class.
This approach also has the added side benefit of forcing us to clean up a
few quirks in the object/class model. :)
More information about the Python-3000
mailing list