1. 程式人生 > >python 子類繼承父類的__init__方法

python 子類繼承父類的__init__方法

父類:

1 class A(object):
2     def __init__(self, name):
3         self.name = name
4         print("父類name:", self.name)
5 
6     def getName(self):
7         return '子類例項A :' + self.name

子類繼承:子類不重寫__init__,例項化子類時,會自動呼叫父類定義的__init__

1 class B(A):
2     def getName(self):
3         return '
B '+self.name 4 5 if __name__=='__main__': 6 b=B('hello') 7 print(b.getName())

執行結果:

父類name: hello
子類例項B :hello

 但重寫了__init__時,例項化子類,就不會呼叫父類已經定義的__init__

 1 class A(object):
 2     def __init__(self, name):
 3         self.name = name
 4         print("父類name:", self.name)
5 6 def getName(self): 7 return '子類例項A :' + self.name 8 9 10 class B(A): 11 def __init__(self, name): 12 print("子類的init例項") 13 self.name = name 14 15 def getName(self): 16 return '子類例項B :' + self.name 17 18 if __name__ == '__main__': 19 b = B('
hello') 20 print(b.getName())

 

執行結果:

子類的init例項
子類例項B :hello

為了能使用或擴充套件父類的行為,最好顯示呼叫父類的__init__方法

 1 class A(object):
 2     def __init__(self, name):
 3         self.name = name
 4         print("父類name:", self.name)
 5 
 6     def getName(self):
 7         return '子類例項A :' + self.name
 8 
 9 
10 class B(A):
11     def __init__(self, name):
12         super(B, self).__init__(name)
13         print("子類的init例項")
14         self.name = name
15 
16     def getName(self):
17         return '子類例項B :' + self.name
18 
19 if __name__ == '__main__':
20     b = B('hello')
21     print(b.getName())

執行結果

父類name: hello
子類的init例項
子類例項B :hello