Python Multiple Inheritance

By | June 30, 2019

In this tutorial, we will discuss multiple inheritance in python and also code a program for it. We will also learn the multi-level inheritance.

Multiple Inheritance in Python

Multiple inheritance is a concept of Inheritance in which a derived class can inherit from more than one Base classes.

It is a very powerful property of inheritance and comes very handy when we work on a big project, with the help of Multiple inheritance a class can inherit more than one base classes.

Syntax:

class base_1:
    #base_1 block
class base_2:
    # base_2 block
class derived(base_2, base_1):
    #base derived block

Multiple inheritance example:

class Boy: 
    def __init__(self):
        super().__init__()
        self.boy_Name= "John"
    def get_boy_Name(self): 
        return self.boy_Name 
class Girl: 
    def __init__(self):
        super().__init__()
        self.girl_name="Richa"
    def get_girl_Name(self): 
        return self.girl_name 
class Call(Boy, Girl): 
    def __init__(self): 
        super().__init__() 
C1 = Call() 
print(C1.get_boy_Name())
print(C1.get_girl_Name())

#Output:

John
Richa

Behind the Code:

Here in the above example, we have used super().__init__() function to initialize all the classes at once. And like inheritance in multiple inheritance, we have used the derived class to access it’s all base classes functions.

Multi-Level Inheritance

Multi-inheritance is similar as Multiple inheritances but the only difference is, in Multiple inheritance this is only one derive class to inherit from multiple base classes but in Multi-level inheritance a derive class inherit from another derived class.

Multi-level Inheritance Syntax

class base:
    # base class
class derived_1(base):
    # first derived class
class derived_2(derived_1):
    # inheriting from derived class

Method Resolution Order

Method of Resolution also known as MRO it describes the behaviour of the child class object, and tell in which order the child class object will call the parent class methods and attributes.

Example:

class B:
    def b(self):
        print('b')
    def k(self):
        print("b's k")
class C:
    def c(self):
        print('c')
    def k(self):
        print("c's k")
class D(B, C):
    def d(self):
        print('d')
d = D()
d.b()
d.c()
d.d()
d.k()

#Output:

b
c
d
b's k

Behind the code:

In the above Example, we inherit the class B and C in class D, and when we create the object of class D so, we get the authority to call the methods of B and C using the D object because we have inherited them.

You can see that B and C both contain a method with same name k(self), printing different outputs but when we use the D object and call that k() method, only Class B method get executed not class C why? This is because of MRO (method resolution order).

When we call d.k(), the object first search the method k() in its own class which is class D then it went for class B and there it finds k() method.

What if class B did not have method k()?

then the object d would look in class C for it.

What if class B and C both did not have method k().

the object d would start to look in python built-in methods and if python built-in method did not have k() method then it would throw an error.

Python Tutorials


Introduction

Flow Control

Functions

Datatypes

File Handling

Object & Class

Additional Tutorials

 

Category: Python Tags: ,

About Paridhi Joshi

Paridhi Joshi is an expert web content manager with significant experience in content creation. Professionally she is dedicated to staying up to date with the latest trends and technologies in content writing and committed to bringing state-of-the-art web approaches to the workplace. She is an efficient multi-tasker who can complete multiple projects under strict deadlines.

Leave a Reply

Your email address will not be published. Required fields are marked *