Yugo Kamo Yugo Kamo - 1 month ago 13
Python Question

Inheritance and init method in Python

I'm begginer of python. I can't understand inheritance and

__init__()
.

class Num:
def __init__(self,num):
self.n1 = num

class Num2(Num):
def show(self):
print self.n1

mynumber = Num2(8)
mynumber.show()


RESULT:
8


This is OK. But I replace
Num2
with

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


RESULT:
Error. Num2 has no attribute "n1".


In this case, how can
Num2
access
n1
?

Answer

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