[Python-3000] Metaclasses in Python 3000: Draft 2 (original) (raw)
Guido van Rossum guido at python.org
Thu Mar 15 22:08:29 CET 2007
- Previous message: [Python-3000] Metaclasses in Python 3000: Draft 2
- Next message: [Python-3000] Metaclasses in Python 3000: Draft 2
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 3/15/07, Talin <talin at acm.org> wrote:
Guido van Rossum wrote: > While you're at it, could you also add a pointer to this patch as a > sample implementation? > > http://python.org/sf/1681101
That is way cool.
It is now way cooler -- it works! The build_class function is implemented in Python. To try this out, go to the SF patch. I'm soliciting help at this point!!
One other thing that I think might be good to have (at some point after we get a working implementation) is some sort of HOWTO document (apart from the PEP) that lays out a set of guidelines or advice on creating metaclasses. Perhaps a Python cookbook recipe or something.
The reason I say this is because one of the things that I noticed is that writing a metaclass that handles all corner cases properly can be quite tricky. As an example, if you're doing anything with ordered fields, you need to make sure that the base class's ordered fields are properly incorporated into the calculation. Exploiting the new metaclass mechanism fully requires a deeper knowledge of the way function bodies are evaluated and how the type() constructor works. The fact that there was some confusion as to what methods of the dict interface needed to be supported is evidence of this. The PEP gives you a mechanism for declaring and using metaclasses, and invites you to play with the class machinery at a deeper level, but it doesn't tell much about the internal mechanism and structure of classes themselves, or what is/isn't valid in terms of tweaking them. Thus, for example, if I want a class whose instances don't have a dictionary, but instead store their members in a flat array (a la slots), I would need to know what parts of the system will choke, expecting a dict to be there when there isn't one, and how to get around that.
Yes, this would be a great thing to add to the documentation somewhere.
-- --Guido van Rossum (home page: http://www.python.org/~guido/)
- Previous message: [Python-3000] Metaclasses in Python 3000: Draft 2
- Next message: [Python-3000] Metaclasses in Python 3000: Draft 2
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]