1. 程式人生 > >Python3 類和繼承

Python3 類和繼承

 1 import random as r
 2 
 3 class Fish:
 4     def __init__(self):
 5         self.x = r.randint(0,10)
 6         self.y = r.randint(0,10)
 7 
 8     def move(self):
 9         self.x -= 1
10         print('我的位置是:%s - %s'%(self.x, self.y))
11 
12 class GoldFish(Fish):
13     pass
14 
15 class Shark(Fish):
16 def __init__(self): 17 #Fish.__init__(self) 18 super().__init__() 19 #super不需要給出基類/父類的名字,如果有多重繼承, 20 #則只需要修改引用時的父類名稱,不需要每次都修改全部被繼承的方法 21 self.hungry = True 22 23 def eat(self): 24 if self.hungry: 25 print('Eat it up') 26 self.hungry = False
27 else: 28 print('Full')

注意如果子類Shark()引用父類Fish()時,如果不使用super()函式,則Shark()子類產生的物件時沒法呼叫move()方法的,因為不存在x,y引數

使用super()函式,則可以move(),而且只需要指出父類的方法,不需要self。

如果有多重繼承,則只需要修改Shark(Fish)中的Fish名稱,不需要修改super()函式內的方法名,super()函式會自動找到父類的方法。

“super函式超級之處在於你不需要明確給出任何基類的名字,它會自動幫你找出所有積累以及對應的方法。由於不用給出基類的名字,這就意味著你如果改變了類繼承關係,只要改變class語句裡的父類即可,而不必在程式碼中修改所有被繼承的方法”

 

另一個例子:

 1 class A():
 2     def __init__(self):
 3         print('進入A')
 4         print('離開A')
 5 
 6 class B(A):
 7     def __init__(self):
 8         print('進入B')
 9         #A.__init__(self)
10         super().__init__()
11         print('離開B')
12 
13 class C(A):
14     def __init__(self):
15         print('進入C')
16         #A.__init__(self)
17         #super().__init__()
18         print('離開C')
19 
20 class D(B,C):
21     def __init__(self):
22         print('進入D')
23         #B.__init__(self)
24         #C.__init__(self)
25         super().__init__()
26         print('離開D')
27         
28         

d=D()會出現什麼呢?