[ 使用 super 函數]
super 函數能夠自動找到基類的方法,而且還傳入了 self參數:
代碼進行如下修改
class Shark(Fish):
def _ _init_ _(self):
super(). _ _init _ _()
self.hungry = True
運行後得到同樣的結果:
>>> shark = Shark()
>>> shark.move()
我的位置是: 6 1
>>> shark.move()
我的位置是: 5 1
super 函數的「超級」之處在於:不需要明確給出任何基類的名字,它會自動找出所有基類以及對應的方法。由於不用給出基類的名字,這就意味著如果需要改變類繼承關係,只要改變class語句裡的父類即可,而不必在大量代碼中去修改所有被繼承的方法。
[多重繼承]
除此之外,Python 還支持多繼承,就是可以同時繼承多個父類的屬性和方法。多重繼承的語法如下:
class 類名(父類1,父類2,父類3,...):
…
舉個例子:
>>>class Basel:
def fool(self):
print("我是fool,我在Basel中...」)
>>>class Base2:
def foo2(self):
print("我是foo2,我在Base2中..")
>>> class C(Basel, Base2):
pass
>>> c = C()
>>> c.foo1()
我是foo1,我在Basel中...
>>> c.foo2()
我是foo2,我在Base2中..
但多重繼承很容易導致代碼混亂,所以當不確定是否必須使用多重繼承的時候,請儘量避免使用它,因為有些時候會出現不可預見的Bug
[組合]
前面先是學習了繼承的概念,然後又學習了多重繼承,但聽到「大牛們」強調說,不到必要的時候不使用多重繼承。哎呀,這可讓大家煩惱死了,就像我們有了烏龜類、魚類,現在要求定義一個類,叫水池,水池裡要有烏龜和魚。用多重繼承就顯得很奇怪,因為水池和烏龜、魚是不同物種,那要怎樣才能把它們組合成一個水池的類呢?
在 Python 裡其實很簡單,直接把需要的類放進去實例化就可以了,這就叫組合:
class Turtle:
de f _ _init_ _(self,x):
self.num ×
class Fish:
de f _ _init_ _ (self, x):
self.num = X
class Pool:
def _ _init_ _ (self,x,y):
self.turtle = Turtle(x)
self.fish = Fish(y)
def print_num(self):
print ("水池裡總共有烏龜%d只,小魚%d條!"&%(self.turtle.num,self.fish.num))
程序實現如下:
>>>pool = Pool(1,10)
>>>pool.print_num()
水池裡總共有烏龜1隻,小魚10條!
歡迎留言點讚關注
我們一起分享AI學習與發展的乾貨
如轉載,請後臺留言,遵守轉載規範