Introduction
Multilevel inheritance is a type of inheritance in which a class (called the child or subclass) inherits from another class (called the parent or superclass), which in turn inherits from another class. This creates a chain of inheritance, where each class inherits attributes and methods from its predecessor.
Key Concepts
Grandparent Class
The top-most class in the inheritance chain.
Parent Class
The class that inherits from the grandparent class.
Child Class
The class that inherits from the parent class.
Multilevel Inheritance
Description: A class (child class) inherits from another class (parent class), which in turn inherits from another class (grandparent class).
+---------+ | Class A | +---------+ | | +---------+ | Class B | +---------+ | | +---------+ | Class C | +---------+
Syntax
Defining a Grandparent Class
class GrandparentClass: def __init__(self, attribute1): self.attribute1 = attribute1 def method1(self): return "This is method1 from GrandparentClass"
Defining a Parent Class
class ParentClass(GrandparentClass): def __init__(self, attribute1, attribute2): super().__init__(attribute1) # Inheriting from GrandparentClass self.attribute2 = attribute2 def method2(self): return "This is method2 from ParentClass"
Defining a Child Class
class ChildClass(ParentClass): def __init__(self, attribute1, attribute2, attribute3): super().__init__(attribute1, attribute2) # Inheriting from ParentClass self.attribute3 = attribute3 def method3(self): return "This is method3 from ChildClass"
Example
Let’s consider a real-world example of a family hierarchy, where the Grandparent
, Parent
, and Child
classes represent three generations.
Grandparent Class: Grandparent
class Grandparent: def __init__(self, name): self.name = name def get_name(self): return f"Grandparent: {self.name}"
Parent Class: Parent
class Parent(Grandparent): def __init__(self, name, occupation): super().__init__(name) # Inheriting from Grandparent self.occupation = occupation def get_occupation(self): return f"Occupation: {self.occupation}"
Child Class: Child
class Child(Parent): def __init__(self, name, occupation, school): super().__init__(name, occupation) # Inheriting from Parent self.school = school def get_school(self): return f"School: {self.school}"
Creating and Using Objects
# Creating an object of the Child class child = Child("Ramesh", "Engineer", "Greenwood High") # Displaying information using methods from all three classes print(child.get_name()) # Output: Grandparent: Ramesh print(child.get_occupation()) # Output: Occupation: Engineer print(child.get_school()) # Output: School: Greenwood High
Explanation
- Grandparent Class (
Grandparent
): Defines an attribute (name
) and a method (get_name
). - Parent Class (
Parent
): Inherits fromGrandparent
, adds an attribute (occupation
), and a method (get_occupation
). - Child Class (
Child
): Inherits fromParent
, adds an attribute (school
), and a method (get_school
).
Real-World Example: Company Hierarchy
Let’s consider a real-world example of a company hierarchy, where we have an Employee
class, a Manager
class that inherits from Employee
, and a Director
class that inherits from Manager
.
Grandparent Class: Employee
class Employee: def __init__(self, name, employee_id): self.name = name self.employee_id = employee_id def get_details(self): return f"Employee Name: {self.name}, ID: {self.employee_id}"
Parent Class: Manager
class Manager(Employee): def __init__(self, name, employee_id, department): super().__init__(name, employee_id) # Inheriting from Employee self.department = department def get_department(self): return f"Department: {self.department}"
Child Class: Director
class Director(Manager): def __init__(self, name, employee_id, department, region): super().__init__(name, employee_id, department) # Inheriting from Manager self.region = region def get_region(self): return f"Region: {self.region}"
Creating and Using Objects
# Creating an object of the Director class director = Director("Sita", "D001", "Engineering", "North America") # Displaying information using methods from all three classes print(director.get_details()) # Output: Employee Name: Sita, ID: D001 print(director.get_department()) # Output: Department: Engineering print(director.get_region()) # Output: Region: North America
Explanation
- Grandparent Class (
Employee
): Defines common attributes (name
,employee_id
) and a method (get_details
) for all employees. - Parent Class (
Manager
): Inherits fromEmployee
, adds an attribute (department
), and a method (get_department
). - Child Class (
Director
): Inherits fromManager
, adds an attribute (region
), and a method (get_region
).
Conclusion
Multilevel inheritance in Python allows a class to inherit attributes and methods from a parent class, which in turn inherits from another class. This creates a hierarchy of classes that promotes code reusability and logical structure. By understanding and utilizing multilevel inheritance, you can design more organized and maintainable object-oriented systems. The provided examples of a family hierarchy and a company hierarchy demonstrate how multilevel inheritance can be effectively applied in real-world scenarios.