Python supports multiple inheritance, but good simple examples are very hard to find. So here is an example which I wrote during my trip to Ireland, where I was running a private Python course (
link - Python courses).
I've defined two base classes - a "transport object" that provides a method to return the higher capacity of two different pieces of transport, and (in order to demonstrate decorators, classmethods and staticmethods), a method to return the highest capacity of a whole list of different transport objects.
But I can't create just a "Transport object" - I can create either public transport objects or private transport objects, both of which extend my transport class and use my first inheritance. That's fairly typical so far of any OO language.
I have then defined a class of "label object". That's a class through which I can apply a piece of text to an object - and when I get that text back out, it has been capitalized for effect.
Now - I may want to label a lot more than just transport objects, so my label objects - the attributes and all the things done with them - are not in the same class as the transport objects, but in their own class. And then I have simply included that class too in the tuple on the end of the class definitions which need multiple inheritance:
class pubtrans(trans,label):
and it works. As easily as that.
Dorothy-2: grahamellis$ python fob
To KEEVIL carrying 4
To SWINDON carrying 150
To SEEND CLEEVE carrying 7
To LONDON PADDINGTON carrying 455
To BATH SPA carrying 61
Let's see is Seend or Swindon has the higher capacity
SWINDON : 150
Let's see which has the highest capacity of all
LONDON PADDINGTON : 455
Dorothy-2: grahamellis$
The full source code of the example may be found
[here].
I said at the start that this was an easy first example. And - yes - it is. Once you start calling the base constructors of the superclass, once you start working with subclasses which inherit from several base classes which in turn inherit - and perhaps from other common classes - it starts to get more complex. Such diamond relationships ARE supported, but that's taking it rather beyond this first illustrative example which I set out to provide you with.
And let me end with a work of caution. You won't need multiple inheritance very often (that's why there aren't many examples around ...) and there are often much easier ways. See
[here]. But if needs must then, yes, Python can do it.
(written 2010-04-14, updated 2010-05-16)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Y112 - Python - Objects - Intermediate [296] Using a Python dictionary as a holder of object attributes - (2005-04-30)
[383] Overloading of operators on standard objects in Python - (2005-07-19)
[477] Class, static and unbound variables - (2005-10-25)
[656] Think about your design even if you don't use full UML - (2006-03-24)
[831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
[903] Pieces of Python - (2006-10-23)
[964] Practical polymorphism in action - (2006-12-04)
[1146] __new__ v __init__ - python constructor alternatives? - (2007-04-14)
[1217] What are factory and singleton classes? - (2007-06-04)
[1517] Python - formatting objects - (2008-01-24)
[1644] Using a utility method to construct objects of different types - Python - (2008-05-17)
[1661] Equality, sameness and identity - Python - (2008-05-31)
[1819] Calling base class constructors - (2008-10-03)
[2368] Python - fresh examples of all the fundamentals - (2009-08-20)
[2409] TypeError: super() argument 1 must be type, not classobj (Python) - (2009-09-18)
[2485] How do I set up a constant in Python? - (2009-10-31)
[2693] Methods that run on classes (static methods) in Python - (2010-03-25)
[2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
[2722] Mixins example in Python - (2010-04-14)
[2764] Python decorators - your own, staticmethod and classmethod - (2010-05-14)
[2785] The Light bulb moment when people see how Object Orientation works in real use - (2010-05-28)
[2889] Should Python classes each be in their own file? - (2010-07-27)
[2905] Defining static methods in Python - (2010-08-05)
[2994] Python - some common questions answered in code examples - (2010-10-10)
[3002] A list of special method and attribute names in Python - (2010-10-17)
[3442] A demonstration of how many Python facilities work together - (2011-09-16)
[3472] Static variables in functions - and better ways using objects - (2011-10-10)
[3524] Metaclasses (Python) and Metatables (Lua) - (2011-11-17)
[3796] Backquote, backtic, str and repr in Python - conversion object to string - (2012-07-05)
[3887] Inheritance, Composition and Associated objects - when to use which - Python example - (2012-10-10)
[4028] Really Simple Class and Inheritance example in Python - (2013-03-04)
[4094] Python Properties - how and why - (2013-05-18)
[4344] Python base and inherited classes, test harness and unit testing - new examples - (2014-12-07)
[4356] Object factories in C++, Python, PHP and Perl - (2014-12-19)
[4366] Changing what operators do on objects - a comparison across different programming languages - (2014-12-26)
[4410] A good example of recursion - a real use in Python - (2015-02-01)
[4449] Spike solution, refactoring into encapsulated object methods - good design practise - (2015-03-05)
[4450] Deciding whether to use parameters, conditional statements or subclasses - (2015-03-05)
[4541] Setting up and tearing down with the Python with keyword - (2015-10-16)
[4649] Object and Static methods - what is the difference; example in Python 3 - (2016-02-17)
[4717] with in Python - examples of use, and of defining your own context - (2016-11-02)
[4718] Defining an object that is a modified standard type in Python - (2016-11-02)
[4719] Nesting decorators - (2016-11-02)
Some other Articles
Escapee Grandparents welcome - Henfield and MelkshamReturning multiple values from a function - LuaRegular Expressions in PythonMultiple inheritance in Python - complete working exampleTraffic lights in PythonPython - access to variables in the outer scopeMelksham in PicturesUploading an image, document or pdf via a browser (php)