Inheritance and init method in Python Inheritance and init method in Python python python

Inheritance and init method in Python


In the first situation, Num2 is extending the class Num and since you are not redefining the special method named __init__() in Num2, it gets inherited from Num.

When a class defines an __init__() method, class instantiation automatically invokes __init__() for the newly-created class instance.

In the second situation, since you are redefining __init__() in Num2 you need to explicitly call the one in the super class (Num) if you want to extend its behavior.

class Num2(Num):    def __init__(self,num):        Num.__init__(self,num)        self.n2 = num*2


When you override the init you have also to call the init of the parent class

super(Num2, self).__init__(num)

Understanding Python super() with __init__() methods


A simple change in Num2 class like this:

super().__init__(num) 

It works in python3.

class Num:        def __init__(self,num):                self.n1 = numclass Num2(Num):        def __init__(self,num):                super().__init__(num)                self.n2 = num*2        def show(self):                print (self.n1,self.n2)mynumber = Num2(8)mynumber.show()