Simple metaclass code failing

LittleGrasshopper seattlehanks at yahoo.com
Mon Jun 1 00:52:21 CEST 2009


This is some simple code which I got from Guido's paper on the
unification of classes and types, which Arnaud suggested to improve my
knowledge of metaclasses:

class M1(type):
    pass
class M2(M1):
    pass
class M3(M2):
    pass
class C1:
    __metaclass__ = M1
class C2(C1):
    __metaclass__ = M2
class C3(C1, C2):
    __metaclass__ = M3

It is failing when processing C3:
Traceback (most recent call last):
  File "metaerror.py", line 18, in <module>
    class C3(C1, C2):
TypeError: Error when calling the metaclass bases
    Cannot create a consistent method resolution
order (MRO) for bases C2, C1

Since M3 is a subclass of M1 and M2 (which are the metaclasses for the
bases of C3, I don't understand the error. Then again, the error seems
to reference the MRO.

I hope this is one of those posts that I can look back in a few months
from now and think "Man, was that a dumb thing to ask!" Until then, I
would appreciate your help in trying to figure out what's going on.

Lukas



More information about the Python-list mailing list