GNU Info

Info Node: (python2.1-tut.info)Multiple Inheritance

(python2.1-tut.info)Multiple Inheritance


Prev: Inheritance Up: Inheritance
Enter node , (file) or (file)node

Multiple Inheritance
--------------------

Python supports a limited form of multiple inheritance as well.  A
class definition with multiple base classes looks as follows:

     class DerivedClassName(Base1, Base2, Base3):
         <statement-1>
         .
         .
         .
         <statement-N>

The only rule necessary to explain the semantics is the resolution rule
used for class attribute references.  This is depth-first,
left-to-right.  Thus, if an attribute is not found in
`DerivedClassName', it is searched in `Base1', then (recursively) in
the base classes of `Base1', and only if it is not found there, it is
searched in `Base2', and so on.

(To some people breadth first -- searching `Base2' and `Base3' before
the base classes of `Base1' -- looks more natural.  However, this would
require you to know whether a particular attribute of `Base1' is
actually defined in `Base1' or in one of its base classes before you
can figure out the consequences of a name conflict with an attribute of
`Base2'.  The depth-first rule makes no differences between direct and
inherited attributes of `Base1'.)

It is clear that indiscriminate use of multiple inheritance is a
maintenance nightmare, given the reliance in Python on conventions to
avoid accidental name conflicts.  A well-known problem with multiple
inheritance is a class derived from two classes that happen to have a
common base class.  While it is easy enough to figure out what happens
in this case (the instance will have a single copy of "instance
variables" or data attributes used by the common base class), it is not
clear that these semantics are in any way useful.


automatically generated by info2www version 1.2.2.9