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)
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()