類別的繼承
## Python 類別繼承簡介
**繼承(Inheritance)** 是物件導向程式設計的重要概念,讓子類別(subclass)可以重複使用父類別(parent class)中的屬性與方法,並可進一步新增或修改功能。
### 基本語法
```python
class 父類別:
# 屬性與方法
pass
class 子類別(父類別):
# 新增或覆寫屬性與方法
pass
```
子類別會自動擁有父類別的公開方法與屬性。
---
## 範例一:基本繼承與方法覆寫
```python
class Animal:
def speak(self):
print("動物發出聲音")
class Dog(Animal):
def speak(self):
print("狗叫:汪汪")
animal = Animal()
dog = Dog()
animal.speak() # 動物發出聲音
dog.speak() # 狗叫:汪汪
```
`Dog` 繼承了 `Animal`,並且重新定義(覆寫)了 `speak()` 方法,因此呼叫 `dog.speak()` 時會使用子類別自己的版本。
---
## 範例二:使用 `super()` 呼叫父類別建構方法
```python
class Person:
def __init__(self, name):
self.name = name
def introduce(self):
print(f"我是 {self.name}")
class Student(Person):
def __init__(self, name, student_id):
super().__init__(name) # 呼叫父類別的 __init__()
self.student_id = student_id
def introduce(self):
super().introduce() # 呼叫父類別的方法
print(f"學號是 {self.student_id}")
student = Student("小明", "S001")
student.introduce()
```
輸出:
```text
我是 小明
學號是 S001
```
`super()`可以用來呼叫父類別的方法,避免重複撰寫相同程式碼。
---
## 使用上的注意事項
1. **子類別可以覆寫父類別方法**
若子類別定義了相同名稱的方法,呼叫時會優先使用子類別版本。
2. **覆寫 `__init__()` 時要注意初始化父類別**
若子類別有自己的 `__init__()`,通常應使用:
```python
super().__init__(...)
```
否則父類別的屬性可能不會被正確建立。
3. **使用 `super()` 比直接指定父類別名稱更具彈性**
```python
super().method()
```
比直接寫:
```python
Parent.method(self)
```
更適合未來修改類別結構,也較適用於多重繼承。
4. **繼承應該符合「是一種」的關係**
例如「狗是一種動物」適合使用繼承;但「汽車有一個引擎」通常應使用組合(composition),而不是繼承。
5. **可使用 `isinstance()` 檢查物件是否屬於某個類別**
```python
isinstance(student, Person) # True
```
總之,繼承可以減少重複程式碼,並讓類別之間形成清楚的階層關係;但不應為了重複使用少量程式碼而濫用繼承。
相關學習地圖、教學課程
Python 資料工程
Python 後端工程、資料庫