solving the metaclass conflict

Phillip J. Eby pje at
Sun Jun 8 00:43:10 CEST 2003

mis6 at (Michele Simionato) wrote in message news:<2259b0e2.0306070629.7f5fcad7 at>...
> I have just posted a recipe on the online Cookbook that could be of interest
> for metaclasses users.
> ----------------------------------------------------------------------------
> Description:
> Any serious user of metaclasses has been bitten at least once by the 
> infamous metaclass/metatype conflict. Here I give a general recipe 
> to solve the problem, as well as some theory and some examples.
>  -->

FYI, note that your implementation doesn't:

* Handle classic classes in the base class list ('trivial()' should
check for 'is ClassType' as well as 'is type')

* Handle non-type metatype roots (e.g. ExtensionClass and MESS)

* Handle multi-level metaclasses (e.g. metametaclasses)

* Remove unneeded metaclasses that are a subclass of another listed

* Reuse all generated metaclasses (You're memoizing on a set of base
classes, rather than on the set of unique metaclasses.)

PEAK's 'peak.util.Meta' module contains a more-complete implementation
of this technique.  (See for info on

It's bloody difficult to write a correct, complete, and efficient
metaclass generator, so it's no wonder Guido chose to punt on this in
2.2 (and 2.3 for that matter).

More information about the Python-list mailing list