Python3 類和繼承
阿新 • • 發佈:2018-12-29
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 = False27 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()會出現什麼呢?