Trusted answers to developer questions
Trusted Answers to Developer Questions

Related Tags

python
inheritance
oop
communitycreator

What is hybrid inheritance in Python?

Aakanksha Govindaraju

Grokking Modern System Design Interview for Engineers & Managers

Ace your System Design Interview and take your career to the next level. Learn to handle the design of applications like Netflix, Quora, Facebook, Uber, and many more in a 45-min interview. Learn the RESHADED framework for architecting web-scale applications by determining requirements, constraints, and assumptions before diving into a step-by-step design process.

Inheritence

  • Inheritance is the process of creating a new class from an existing class.

  • The class that is inherited is known as the super/parent/base class, and the class that inherits is known as the sub/child/derived class.

  • A derived class can access properties of the base class.

  • Inheritance provides extendibility and reusability.

Types of inheritance

  1. Single inheritance
  2. Multi-level inheritance
  3. Multiple inheritances
  4. Hierarchical inheritance
  5. Hybrid inheritance

Hybrid inheritance

Features of more than one type of inheritance are mixed to form Hybrid Inheritance.

Example

svg viewer
g Base Base Derived_1 Derived_1 Base->Derived_1 Derived_2 Derived_2 Base->Derived_2 Derived_3 Derived_3 Derived_1->Derived_3 Derived_2->Derived_3
# Creating a Base class named University:
class University:
def __init__(self):
print("Contructor of the Base class")
# Initializing a class variable named univ to store university name:
self.univ = "MIT"
def display(self): # Method to print the University Name:
print(f"The University name is: {self.univ}")

In the Python script above:

  • We create a Base class named University using the keyword “class” with a constructor (init) that will be called when the object of the class is created (Object Instantiation).
  • Next, in the Constructor we will initialize the data members, like univ, to store any value.
  • Next, we have a display method to display the value of the data member.
Members of the "University" class

Parameters

Description

__init__

Non-parametrized constructor to initialize the data members.

self.univ

Data Member of the class to store the name of the University.


display()

Member Method to display the University Name.

class Course(University):
def __init__(self):
# using "super" keyword to access members of the parent class having same name:
print("Constructor of the Child Class 1 of Class University")
University.__init__(self)
self.course = "CSE"
def display(self): # Method to print the Course Name:
# using "super" keyword to access display method defined in the parent class:
print(f"The Course name is: {self.course}")
University.display(self)
  • Now, we create another class named Course that is the Child/ Derived class of University.
  • Here, since the Course class is the derived class of University, this class can access all the members of the parent class.
  • Therefore, we use class name to access different members of the parent class, as shown in line numbers 5 and 10 in the above code snippet.
Members of the "Course" class

Parameters

Description

__init__

Non-parametrized constructor to initialize the data members.

self.course

Data Member of the class to store the name of the Course.


display()

Member Method to display the Course Name.

# 2nd Derived or Child Class of University Class:
class Branch(University):
def __init__(self):
print("Constructor of the Child Class 2 of Class University")
self.branch = "Data Science"
def display(self): # Method to print the Branch Name:
print(f"The Branch name is: {self.branch}")

Similarly, we define the 2nd Derived class, named “Branch”, of the University parent class.

Members of the "Branch" class

Parameters

Description

__init__

Non-parametrized constructor to initialize the data members.

self.branch

Data Member of the class to store the name of the Branch.


display()

Member Method to display the Branch Name.

# Derived or Child Class of Class Course and Branch:
class Student(Course, Branch):
def __init__(self):
print("Constructor of Child class of Course and Branch is called")
self.name = "Tonny"
Branch.__init__(self)
Course.__init__(self)
def display(self):
print(f"The Name of the student is: {self.name}")
Branch.display(self)
Course.display(self)

Now, we define the Child Class named “Student”, of classes Course and Branch, to make this Inheritance of type Hybrid.

In a similar way, we can define the class and call various members of the parent classes.

Members of the "Student" class

Parameters

Description

__init__

Non-parametrized constructor to initialize the data members.

self.name

Data Member of the class to store the name of the Student.


display()

Member Method to display the Student Name.

Code

# Creating a Base class named University:
class University:
def __init__(self):
print("Contructor of the Base class")
# Initializing a class variable named univ to store university name:
self.univ = "MIT"
def display(self): # Method to print the University Name:
print(f"The University name is: {self.univ}")
# 1st Derived or Child Class of University Class:
class Course(University):
def __init__(self):
# using "super" keyword to access members of the parent class having same name:
print("Constructor of the Child Class 1 of Class University")
University.__init__(self)
self.course = "CSE"
def display(self): # Method to print the Course Name:
# using "super" keyword to access display method defined in the parent class:
print(f"The Course name is: {self.course}")
University.display(self)
# 2nd Derived or Child Class of University Class:
class Branch(University):
def __init__(self):
print("Constructor of the Child Class 2 of Class University")
self.branch = "Data Science"
def display(self): # Method to print the Branch Name:
print(f"The Branch name is: {self.branch}")
# Derived or Child Class of Class Course and Branch:
class Student(Course, Branch):
def __init__(self):
print("Constructor of Child class of Course and Branch is called")
self.name = "Tonny"
Branch.__init__(self)
Course.__init__(self)
def display(self):
print(f"The Name of the student is: {self.name}")
Branch.display(self)
Course.display(self)
# Object Instantiation:
ob = Student() # Object named ob of the class Student.
print()
ob.display() # Calling the display method of Student class.

RELATED TAGS

python
inheritance
oop
communitycreator

CONTRIBUTOR

Aakanksha Govindaraju

Grokking Modern System Design Interview for Engineers & Managers

Ace your System Design Interview and take your career to the next level. Learn to handle the design of applications like Netflix, Quora, Facebook, Uber, and many more in a 45-min interview. Learn the RESHADED framework for architecting web-scale applications by determining requirements, constraints, and assumptions before diving into a step-by-step design process.

Keep Exploring