Python Programming – Method Overriding in Python
Method overriding is one of the important concepts to consider while using inheritance in Python. As we see in the previous programming Code 11.1. for single inheritance that the __init__() method was defined both in the base class as well as derived class. When an object of a derived class is created then the __init_() method of derived class overrides that of the base class. That means, the __init__( ) of the derived class rectangle takes preference over the __init__( ) method of shape class. In order to overcome this issue, the __init__() method of the derived class is extended further to make a call to the __init__( ) method of base class. This is done by using shape, __init__() as shown in code 11.1. By invoking this way, a call to the__init__() method of shape class is made from the __init__() method of the derived class rectangle.
Method overriding can also be resolved by using a built-in Python function super(). The super() function invokes the parent constructor method by itself without referring to the class name as mentioned in the call shape.__init__(). The super() function is used as follows:
super().__init__() |
The programming illustration of resolving method overriding issue is given in Code 11.4. In this code, the ambiguity in single inheritance is resolved by using the super().__init__() function as highlighted in bold in the code rather than using the shape.__init__(self) method. It is to be noted here that while calling the constructor method using the super() function the__init__() function does not contain the argument self.
- Python Programming – Python Single Inheritance
- Python Programming – Python Multilevel Inheritance
- Python Programming – Python Multiple Inheritance
Code: 11.4. Illustration of built-in function super() for single inheritance.
#illustration of resolving method overriding using super()
class shape: #base class def display(self): #display method of base class class rectangle(shape): #derived class rl=rectangle() # object of derived class |
Output
Enter Length: 12 |
In the case of multilevel inheritance, the super() function is used as shown in Code 11.5. In this program, we see that while creating the derived class object rl, the initial call is made to__init__() method of the derived class result. Which further invokes the __init__() method of its parent class marks by using the super() function. Furthermore, the__init__() method of marks class invokes its superclass student’s __init__() method by using the super() function again. The statement code comprising the super() function is highlighted in bold.
Code: 11.5. Illustration of built-in function super() for multilevel inheritance.
#Illustration of super() function in multilevel inheritance
class student: #base class defdisplay(self): #display method of class marks(student): #derived class class result(marks): # new derived class rl=result() # object of derived class result |
Output
Enter Student Name:Robin Name: Robin RollNo: 222 Marks of subject 1= 34.0 Marks of subject 2= 54.0 Marks of subject 3= 55.0 Total Marks: 143.0 Percentage: 47.666666666666664 |
In the case of multiple inheritances, the super() function is used as presented in Code 11.6. In this code, we see that as there exists two parent classes student and marks. Therefore, while invoking __init__ ( )method using super() function only one of the parent’s constructor will be invoked, actually the one which is inherited first by the derived class. For example, the__init__() method of student class will be invoked by using the super() function. In order to make a call to the__init__() method of other parent class marks, we need to use the previous method, which is marks.__init__(self). Therefore, it is to be noted here that in the case of multiple inheritances, the super() function invokes the__init__() constructor method of the firstly inherited parent class and make the call to other
parents classes the previous method of using class name with__init__() method is used.
Code: 11.6. Illustration of super() function in multiple inheritances.
#illustration of super() function in multiple inheritance class student: #base class 1 ‘A student class’ def__init__(self): . #constructor method of base class 1 self.name = (input(‘Enter Student Name:’)) self.rollno = int(input(‘Enter RollNo:’))def display(self): #display method of base class 1 print (“\nName: “, self.name) print (“\nRollNo:”, self.rollno)class marks: #base class 2 ‘A marks class’ def init (self): #Constructor method of base class 2 self.ml = float(input(‘Enter marks of subject 1:’)) self.m2 = float(input(‘Enter marks of subject 2:’)) self.m3 = float(input(‘Enter marks of subject 3:’)) def display_marks(self): #display function of base class 2 print(“\nMarks of subject 1=”, self.ml) print(“\nMarks of subject 2=”, self.m2) print(“\nMarks of subject 3=”, self.m3)class result(student, marks): #derived class ‘A result class’ def__init__(self): #Constructor method of derived class # student.__init__(self) super().__init__( ) marks.__init__(self) self.total_marks = self.ml + self.m2 + self.m3 self.perc = self.totalmarks* 100/300 def display result(self): #display_result function of derived class print(“\nTotal Marks:”, self.total_marks) print(“\nPercentage:”, self.perc) r1=result() # object of derived class result |
Output
Enter Student Name: Rachael Name: Rachael RollNo: 111 Marks of subject 1= 54.0 Marks of subject 2= 65.0 Marks of subject 3= 73.0 Total Marks: 192.0 Percentage: 64 |