[Python-Help] how do I use the __metaclass__ variable to change the default base class?
Alex Martelli
aleaxit at yahoo.com
Mon Dec 2 04:12:22 EST 2002
--- Adam Feuer <adamf at pobox.com> wrote:
> Python folks,
>
> I have a piece of Python software made up of many
> classes that I would
> like to collect information about at runtime-
> specifically, what
> classes hold references to what other classes.
>
> I thought it would be possible to define my own
> class that subclasses
> object, and redefine the __setattr__ method on that
> class. Then, when
> I wanted to collect the information I would use the
> __metaclass__
> global variable to tell Python at runtime that all
> my classes now
> derive from my new base class (that is, the default
> base class for all
> classes is now MyObject)...
>
> I haven't been able to get this to work. What's
> wrong?
You're confusing metaclasses and superclasses, which
are two totally different concepts.
When X is a class object, X's metaclass is type(X).
That has nothing to do with X's base classes, which
are X.__bases__.
To build a custom metaclass, you normally subclass
the built-in type and override some special methods.
For example, to inject a base class B in every class
whose metaclass is M, M.__new__ can suitably inject
B among the bases if needed (the tuple of bases is
passed as one of the arguments to M's special
methods __new__ and __init__).
Alex
__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com
More information about the Python-list
mailing list