一個類別能夠繼承多個父類別,這就是多重繼承。下面小專題一的簡單例子和比較複雜的小專題二都會有多重繼承的使用。
type
:用來檢查一個物件的類型。isinstance
:用來檢查一個物件是否是某個類別的實例,並且能夠處理繼承關係。如果物件是該類別的子類別的實例,isinstance() 仍然會返回 True,這點與 type() 不同。
Bird 類別繼承了兩個父類別,所以它可以使用 Animal 的 speak() 方法和 FlyingAnimal 的 fly() 方法。輸出結果就可以看到小黃既能發出聲音(來自 Animal)又能飛翔(來自 FlyingAnimal)。其他的解析如下:
Animal 類別:
Animal 類別定義了此動物的基本行為,透過 __init__
方法初始化動物的名稱,並提供 speak()
方法來模擬動物發出聲音。
FlyingAnimal 類別:
這個類別定義了飛行動物的行為。雖然它沒有名稱屬性,但因為 Bird 類別同時繼承了 Animal 和 FlyingAnimal,因此可以使用 Animal 類別中的 name
屬性。
初始化和使用:
當我們創建 bird = Bird("小黃")
時,會執行 Animal 類別的 __init__
方法,將 "小黃" 設定為這個物件的名稱,並且這個名稱可以實現兩個父類別的行為。
建立兩種 AI 寵物,並且讓它學會執行不同的指令。為了利用 Python 的物件導向來設計這個 AI 寵物,有一些題目要求需要遵守:
- 建立一個 Flying 類別,讓所有 AI 寵物具備飛行能力。
- 建立一個 AI 寵物 AIBird 類別,繼承自 AIPet 和 Flying,讓這個寵物既能執行基本寵物行為,也能飛行。
- 建立另一個超級 AI 寵物類別 SuperAIPet,繼承自 AIPet 和 Flying,讓這個超級寵物有更多特殊能力。
- 分別使用這些類別進行互動,檢查它們的行為是否正確。
AIPet 類別:
這是基礎 AI 寵物類別,負責管理寵物的基本行為,如吃飯和睡覺。屬性 name
代表寵物名字,hunger
表示寵物的飢餓程度。
Flying 類別:
這個類別專門處理飛行行為,任何繼承 Flying 的寵物類別都會有 fly()
方法,並且能飛行。
AIBird 類別:
AIBird 類別同時繼承了 AIPet 和 Flying。這也是多重繼承的應用,它同時具備寵物的基本行為(如吃飯和睡覺)和特殊的飛行行為(fly()
)。另外它還有鳥類特有的 sing()
方法來模擬鳥兒唱歌。
SuperAIPet 類別:
這個類別也使用了多重繼承,同時繼承自 AIPet 和 Flying。除了飛行行為外,它還有一個 super_power()
方法,模擬超級 AI 寵物的超能力行為。
最後來跟我們的 AI 寵物們進行互動吧~看看這些寵物目前的狀態,可以知道他們在幹嘛,還有飢餓程度如何,非常有互動性><
今天終於對繼承更熟悉了,可以搞得清楚父子類別之間的交互行為。做到最後一個複雜的小專題時,中間有卡住蠻久的,所以無聊的開始研究Python IDLE Shell的視窗畫面,結果發現它竟然是可以顯示行數的!之前完全沒發現,尤其是寫繼承的題目常常要回去找父類別,但是都會找到迷路,原來本來就是可以開的呀@@
今天練習多重繼承,過程中真的感覺到很~複~雜~~一直確定到底什麼方法是需要被繼承的,題目要求的兩種不同動物有一樣的行為,也有不一樣的行為,也是讓我煩惱了好久...總之,輸出最後結果時,真的是滿滿的感動;^;