文章

第16天:類別繼承

課程簡介

類別繼承是物件導向程式設計(OOP)中的重要概念,它允許一個類別(子類別)從另一個類別(父類別)繼承屬性和方法,並可擴展或重寫這些功能。這種結構使得程式碼更加模組化、可重用且易於維護。今天我們將深入學習類別繼承、方法重寫以及多層繼承等進階概念。


學習內容

1. 繼承的基本概念

繼承是一個類別獲取另一個類別的屬性和方法。被繼承的類別稱為 父類別(或基類),繼承的類別稱為 子類別(或派生類)。

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 父類別
class Animal:
    def __init__(self, name):
        self.name = name
    
    def speak(self):
        print(f"{self.name} makes a sound.")

# 子類別 Dog 繼承 Animal
class Dog(Animal):
    def bark(self):
        print(f"{self.name} barks.")

# 創建 Dog 物件
my_dog = Dog("Buddy")
my_dog.speak()  # 輸出: Buddy makes a sound.
my_dog.bark()   # 輸出: Buddy barks.

2. 方法重寫(Override)

子類別可以重寫父類別的方法,以提供不同的實現。這可以讓子類別在保留父類別基礎功能的同時,實現自己特有的行為。

範例:

1
2
3
4
5
6
class Cat(Animal):
    def speak(self):  # 重寫父類別的 speak 方法
        print(f"{self.name} meows.")

my_cat = Cat("Whiskers")
my_cat.speak()  # 輸出: Whiskers meows.

3. 使用 super() 調用父類別的方法

有時子類別希望重寫某個方法,但仍然想要保留父類別方法的部分功能。可以使用 super() 調用父類別的方法。

範例:

1
2
3
4
5
6
7
8
9
10
class Bird(Animal):
    def speak(self):
        super().speak()  # 調用父類別的 speak 方法
        print(f"{self.name} chirps.")

my_bird = Bird("Tweety")
my_bird.speak()
# 輸出:
# Tweety makes a sound.
# Tweety chirps.

4. 子類別的初始化

在初始化子類別時,通常需要先調用父類別的 __init__() 方法,以確保父類別的屬性能正確初始化。這可以使用 super() 來實現。

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Vehicle:
    def __init__(self, brand, model):
        self.brand = brand
        self.model = model

class Car(Vehicle):
    def __init__(self, brand, model, seats):
        super().__init__(brand, model)  # 調用父類別的 __init__
        self.seats = seats

my_car = Car("Toyota", "Corolla", 5)
print(my_car.brand)  # 輸出: Toyota
print(my_car.model)  # 輸出: Corolla
print(my_car.seats)  # 輸出: 5

5. 多層繼承

Python 支援多層繼承,即一個類別可以繼承自另一個已經繼承了某個類別的子類別。這使得一個類別可以通過多層繼承獲得更為複雜的功能。

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Animal:
    def speak(self):
        print("Animal makes a sound.")

class Mammal(Animal):
    def walk(self):
        print("Mammal walks.")

class Dog(Mammal):
    def bark(self):
        print("Dog barks.")

my_dog = Dog()
my_dog.speak()  # 輸出: Animal makes a sound.
my_dog.walk()   # 輸出: Mammal walks.
my_dog.bark()   # 輸出: Dog barks.

6. 多重繼承

Python 支援 多重繼承,即一個子類別可以同時繼承多個父類別的屬性與方法。但這樣的結構可能會導致某些複雜的問題,如方法解析順序(MRO,Method Resolution Order)。

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Flyable:
    def fly(self):
        print("This can fly.")

class Swimmable:
    def swim(self):
        print("This can swim.")

class Duck(Flyable, Swimmable):
    pass

my_duck = Duck()
my_duck.fly()   # 輸出: This can fly.
my_duck.swim()  # 輸出: This can swim.

教學重點

  • 繼承的基本概念:理解類別繼承如何重用父類別的屬性與方法。
  • 方法重寫:學會如何在子類別中重寫父類別的方法,並定義自己的行為。
  • super() 的使用:了解如何在子類別中使用 super() 調用父類別的方法。
  • 多層繼承與多重繼承:熟悉多層繼承和多重繼承的應用,並理解它們的作用與限制。

任務

  1. 創建一個類別 Employee,並建立一個子類別 ManagerManager 應該有一個額外的屬性 team_size,並重寫 introduce() 方法來顯示額外資訊。
  2. 創建一個類別 Shape,其中有一個方法 area(),然後建立兩個子類別 CircleRectangle,並重寫 area() 方法來計算各自的面積。
  3. 創建一個類別 Vehicle,並建立子類別 CarMotorcycle,每個子類別應該有自己特定的方法和屬性,並使用 super() 初始化共同的屬性。
  4. 創建兩個類別 FlyableSwimmable,並建立一個子類別 Bird 同時繼承這兩個類別,讓 Bird 物件能同時飛行與游泳。
本文章以 CC BY 4.0 授權

Comments powered by Disqus.