Ming <[EMAIL PROTECTED]> writes: > I'm working through Wesley Chun's CPP2e and got this error on 13.11.1, > pp 548 where his interpreter snippet shows no problems:
I don't know what a "CPP2e" is. Is it a book? Can you give the ISBN? > ActivePython 2.5.1.1 (ActiveState Software Inc.) b > Python 2.5.1 (r251:54863, May 1 2007, 17:47:05) [ > win32 > Type "help", "copyright", "credits" or "license" f > >>> class A(object): pass > ... > >>> class B(A): pass > ... > >>> class C(B): pass > ... > >>> class D(A, B): pass > ... > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: Error when calling the metaclass bases > Cannot create a consistent method resolution > order (MRO) for bases A, B > > (I submitted the problem to the author but I'm not sure I'll ever hear > back.) I'm guessing that this kind of diamond inheritance is > prohibited by the interpreter, and that his lack of error messages > from the interpretation is due to actually leaving out the "class > B(A): pass" Can someone shed light? Thanks. That's not an example of diamond inheritance <URL:http://en.wikipedia.org/wiki/Diamond_problem> because classes A and B are not distinct classes with a *common* base. Instead, they're in a direct parent-child relationship. So there's no sense in defining class D to inherit from both A *and* B. To get a descendent of both those classes, inheriting from B is sufficient. It should rather be:: class D(B): pass -- \ "Pinky, are you pondering what I'm pondering?" "Uh, I think so, | `\ Brain, but we'll never get a monkey to use dental floss." -- | _o__) _Pinky and The Brain_ | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list