1. Python繼承概述
在 Python 中,繼承是一種讓子類別可以從父類別繼承功能和屬性的機制。這種方式能提升程式碼的重用性,也能提高維護效率。繼承是物件導向程式設計(OOP)中非常重要的概念,特別適用於大型系統開發或長期專案中。
繼承的基本角色
- 提升程式碼重用性:已經撰寫好的類別功能,可以在其他類別中重複使用,避免重複編寫相同的程式碼。
- 方便維護與擴充:當父類別的內容變更時,子類別也會自動受到影響,使得修正與功能擴充更有效率。
class ParentClass:
def greet(self):
print("こんにちは、親クラスです。")
class ChildClass(ParentClass):
def greet(self):
print("こんにちは、子クラスです。")
在這個例子中,ChildClass
重新定義了 ParentClass
的方法。由於 greet
方法被覆寫(override),所以在子類別中會顯示專屬的問候語。
2. Python 中的單一繼承
單一繼承是指一個子類別從一個父類別繼承功能的方式。這是 Python 繼承的最基本形式,可以保持程式碼簡潔,同時具有擴充性。
單一繼承的基本語法與範例
class Car:
def __init__(self, brand, color):
self.brand = brand
self.color = color
def describe(self):
print(f"この車は{self.color}色の{self.brand}です。")
class ElectricCar(Car):
def __init__(self, brand, color, battery_size):
super().__init__(brand, color)
self.battery_size = battery_size
def describe_battery(self):
print(f"バッテリー容量は{self.battery_size}kWhです。")
在這個例子中,ElectricCar
類別繼承了 Car
類別的功能,並額外加入了描述電池容量的方法。透過 super()
呼叫父類別的建構子(constructor),初始化共通屬性如品牌與顏色。

3. 方法的覆寫(Override)
覆寫(Override)是指子類別重新定義父類別的方法。這讓我們可以保留父類別的邏輯,同時根據子類別的需求進行修改。
覆寫的範例
class Animal:
def speak(self):
print("動物的叫聲")
class Dog(Animal):
def speak(self):
print("汪汪!")
在這個例子中,Dog
類別覆寫了 Animal
類別的 speak
方法。因此,Dog
類別的實例會輸出「汪汪」,而 Animal
類別的實例則會輸出「動物的叫聲」。
4. 多重繼承
多重繼承是指一個子類別可以同時從多個父類別繼承功能。這讓開發者可以將不同類別的功能整合進一個類別中,不過實作時需特別注意結構上的複雜性。
多重繼承的範例與注意事項
class A:
def greet(self):
print("A 的問候")
class B:
def greet(self):
print("B 的問候")
class C(A, B):
pass
c = C()
c.greet() # 顯示 "A 的問候"(依照 MRO,優先使用第一個父類別的方法)
在 Python 中,透過 MRO(方法解析順序,Method Resolution Order) 來決定要呼叫哪個父類別的方法。可以使用 C.mro()
來檢視這個順序。多重繼承功能非常強大,但若父類別之間有方法名稱衝突,就必須特別注意方法的解析順序。

5. 使用繼承的實務範例
繼承在日常的程式開發中也非常有用。例如在企業的人事管理系統中,可以透過從基本的員工類別繼承出具有特定職位的類別,來實現程式碼的重用與功能擴充。
實務的人事管理系統範例
class Employee:
def __init__(self, first, last, pay):
self.first = first
self.last = last
self.pay = pay
def fullname(self):
return f'{self.first} {self.last}'
class Manager(Employee):
def __init__(self, first, last, pay, employees=None):
super().__init__(first, last, pay)
self.employees = employees if employees is not None else []
def add_employee(self, employee):
if employee not in self.employees:
self.employees.append(employee)
def print_employees(self):
for emp in self.employees:
print(emp.fullname())
在這個例子中,Manager
類別繼承了 Employee
類別,並加入了管理其他員工的功能。在保留父類別共通功能的同時,也根據管理職務進行功能擴充。
6. 繼承的最佳實踐與與組合(Composition)的比較
雖然繼承功能非常強大,但如果使用過度,可能會讓程式碼結構變得複雜。特別是多重繼承時,類別間的關係可能會變得難以管理。在這種情況下,建議使用組合(Composition)作為替代方案。
組合的範例
組合是一種設計模式,指的是一個類別「擁有」另一個類別的實例作為成員,藉此將某些功能委派給該成員類別。
class Engine:
def start(self):
print("引擎已啟動。")
class Car:
def __init__(self, engine):
self.engine = engine
def start(self):
self.engine.start()
engine = Engine()
car = Car(engine)
car.start() # 顯示 "引擎已啟動。"
如上例所示,不透過繼承也可以讓不同類別共享功能。使用組合的好處是:只加入需要的功能,使程式碼更有彈性且更容易維護。
7. 總結
Python 的繼承是一項強大工具,可以提升程式碼的重用性與可擴充性。透過理解單一繼承、多重繼承、方法覆寫等概念,就能撰寫出高效且容易維護的程式。同時,也要根據情境適當選擇是否使用組合,才能設計出結構清晰、彈性強的程式架構。善用繼承,將有助於你建立穩健而靈活的程式碼基礎。