[Python-3000] Metaclasses in Py3K
talin at acm.org
Fri Dec 8 10:54:34 CET 2006
I'd like to see metaclasses have additional capabilities in Py3K, and
one thing I'd like is for metaclasses to be able to have access to the
order of declarations within a class.
If I understand correctly, in the current Python a class definition is
essentially a suite with ordinary local variables; once that suite
finishes executing, the locals() dict becomes the class's __dict__. The
metaclass slips in between these two phases of construction, in that it
can examine or modify the dict before it becomes a class.
Suppose, however, that the metaclass could hook into the get/set
operations of the locals() dict itself. In other words, the
__metaclass__ statement would have a side-effect of replacing the
locals() dict with a mapping object supplied by the metaclass.
This would allow the metaclass to intercept individual variable
assignments as they occur, rather than taking the whole dict in at once.
I can think of a ton of applications for this. For example, you could
implement the functionality of __slots__ as a metaclass, allowing you to
define the slots using regular Python syntax rather than having to pass
in a list of name strings. You could define C structures using regular
Python syntax. You could declare CORBA or other IDL interfaces using
Python syntax and appropriate decorators. You might even be able to do
things like enumerations using metaclasses.
More information about the Python-3000