Thanks for the all the replies. CPP2e is the Second Edition of the book "Core Python Programming."
On Jan 4, 6:13 pm, Ben Finney <[EMAIL PROTECTED]> wrote: > 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