Info Node: (python2.1-tut.info)Multiple Inheritance
(python2.1-tut.info)Multiple Inheritance
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 byinfo2wwwversion 1.2.2.9