Python class類的派生與繼承詳解

2020-07-16 10:05:26
繼承與派生是物件導向程式設計中最重要的概念之一,本節教學就來介紹類的繼承與派生。

Python 中定義一個類派生自另一個類的語法如下:

class 派生類名(基礎類別名):
    <資料成員宣告 1>
    ...
    <資料成員宣告 N>


基礎類別 BaseClassName 必須與派生類 DerivedClassName 定義在同一個作用域內。如基礎類別來自不同的模組,可以在類名前新增模組名。在定義派生類時可以重寫基礎類別的方法。例如:
class Animal:
    name = ""
    def Speak(self):
        pass

class Cat(Animal):
    name = "狗"
    def Speak(self):
        print ("喵~喵~喵~")

class Human(Animal):
    name ="人"
    def Speak(self):
        print ("你好~")

c = Cat()
c.Speak()
h = Human()
h.Speak()
上述程式碼的執行結果如下所示:

>>> class Animal:
...          name = ""
...          def Speak(self):
...              pass

>>> class Cat(Animal):
...          name = "狗"
...          def Speak(self):
...              print ("喵~喵~喵~")
       
>>> class Human(Animal):
...          name ="人"
...          def Speak(self):
...              print ("你好~")
       
>>> c = Cat()
>>> c.Speak()
喵~喵~喵~
>>> h = Human()
>>> h.Speak()
你好~


Python 支援有限的多重繼承,其語法為:

class 派生類名(基礎類別1, 基礎類別2, ......, 基礎類別N):
    <資料成員宣告 1>
    ...
    <資料成員宣告 N>


需要注意小括號中父類別的順序,若是父類別中有相同的方法名,而在子類使用時未指定,Python 將按照從左至右的順序在這些父類別中查詢該方法。例如:
class Animal:
    name = ""
    def Speak(self):
        pass

class Cat(Animal):
    name = "狗"
    def Speak(self):
        print ("喵~喵~喵~")

class Human(Animal):
    name ="人"
    def Speak(self):
        print ("你好~")

class Actor(Human, Cat):
    name ="演員"
    def Speak(self):
        Human.Speak(self)
        Cat.Speak(self)

a = Actor()
a.Speak()
以上程式碼的執行結果如下所示:

>>> class Animal:
...          name = ""
...          def Speak(self):
...              pass

>>> class Cat(Animal):
...          name = "狗"
...          def Speak(self):
...              print ("喵~喵~喵~")
       
>>> class Human(Animal):
...          name ="人"
...          def Speak(self):
...              print ("你好~")

>>> class Actor(Human, Cat):
...          name ="演員"
...          def Speak(self):
...              Human.Speak(self)
...              Cat.Speak(self)
       
>>> a = Actor()
>>> a.Speak()
你好~
喵~喵~喵~