On May 31, 3:59 pm, Carl Banks <pavlovevide...@gmail.com> wrote: > On May 31, 3:52 pm, LittleGrasshopper <seattleha...@yahoo.com> wrote: > > > > > 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. > > http://www.python.org/download/releases/2.3/mro/ > > Carl Banks
Thank you, I'll read on that paper too in order to figure out what is going on. I guess the resulting MROs do not satisfy monotonicity, I just have to find out how to derive the MRO. I had the notion that it was constructed by listing the current class, followed by the MROs of each base in order, and then retaining the rightmost instance of each class in the MRO list, but I think that might be an oversimplification, since in this case that would be: (C1, object) (C2, C1, object) (C3, C2, C1, object) And I don't see any issues. But I'll read the paper to figure out what the problem is, thanks. -- http://mail.python.org/mailman/listinfo/python-list