Copyright (C) 2000-2012 |
GNU Info (python2.1-tut.info)Multiple InheritanceMultiple 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. |