Metaclass discussons
Michele Simionato
mis6 at pitt.edu
Sun Aug 24 07:46:26 EDT 2003
Gustavo Niemeyer <niemeyer at conectiva.com> wrote in message news:<mailman.1061644806.1203.python-list at python.org>...
> Hi everyone!
>
> I was just part of a small discussion concerning metaclass features on
> Python, and one limitation that was appointed was the inability to
> redefine metaclasses on existent code. Than I thought it was a good
> way to explore some more the metaclass concepts..
>
> Basically, people were arguing that there are some uses for that, based
> on plugging new knowledge on existent classes and instances. Without
> complaining too much about usage issues, I started looking for ways to
> dismiss that limitation.
>
> Without yet considering interpreter hacks, that's what I had as a first
> solution (a very limited one, I must admit):
>
> class M(type): pass
> __metaclass__ = M
> class object:
> __metaclass__ = M
> execfile("somemodule.py", globals(), locals())
>
> Can you imagine any alternative which is not based on the same concept
> (executing the module code on a hacked context)?
Oh, what a wonderfully evil hack! Thanks Gustavo, I never come to my
mind that I could redefine the object class!
I was using the hack of modifing the source code by adding a __metaclass__
atribute and re-exec-uting it, but I didn't like the trick. Then I wrote
a script to regenerate an entire hierarchy with a different metaclass.
Much less hackish, but a bit non-trivial. Your idea is perfect for easy
hacks in the debugging phase (i.e. add a metaclass generating logging
capabilities or other more general debugging utilities). You can
spell it even as
class object(object):
class __metaclass__(type):
pass
# rest of the code
Michele Simionato, Ph. D.
MicheleSimionato at libero.it
http://www.phyast.pitt.edu/~micheles
--- Currently looking for a job ---
More information about the Python-list
mailing list