Python 繼承 inheritance

本篇介紹 Python 繼承 inheritance 的寫法,物件導向程式設計 OOP 中繼承是很重要的觀念,學習正確的觀念有助於在軟體設計中重複利用程式碼與維護性。

Python 繼承(Inheritance)的寫法

Python inheritance 最簡單的繼承寫法如下,
有 BaseClass1, BaseClass2, DerivedClass 兩個類別
DerivedClass 繼承 BaseClass,
並且實例化

python-inheritance.py
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

class BaseClass:
pass

class DerivedClass(BaseClass):
pass

derived = DerivedClass()

方法覆寫(Method Overriding)

這邊介紹子類如何去覆寫父類的方法,
Dog2 繼承了 Dog1,呼叫子類 Dog2.eat() 時會有下列兩種情形,
如果子類有覆寫會以子類方法為優先,如本範例一樣,
如果子類沒覆寫會繼承父類方法為優先,

python-inheritance2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

class Dog1:
def eat(self):
print("Dog1 class eat method is called.")

class Dog2(Dog1):
def eat(self):
print("Dog2 class eat method is called.")

dog = Dog2()
dog.eat()

Dog2 繼承 Dog1,Dog2 子類覆寫 Dog1 父類的 eat 方法,
結果輸出如下,

1
Dog2 class eat method is called.

子類建構子(Constructor)傳遞參數到父類建構子

這邊介紹子類建構子如何傳遞參數到父類的建構子,
子類呼叫父類的建構子有兩種方式,
一種是使用 super()
另一種是直接指定呼叫父類的建構子,
這邊兩種方法都會介紹到,

python-inheritance3.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

class Dog1:
def __init__(self, name):
print("Dog1 ", name)

def eat(self):
print("Dog1 class eat method is called.")

class Dog2(Dog1):
def __init__(self, name): # 跟父類一樣的參數
print("Dog2 ", name)
super().__init__(name)

def eat(self):
print("Dog2 class eat method is called.")

class Dog3(Dog1):
def __init__(self, name, sex): # 比父類多一個參數
print("Dog3 ", name, sex)
Dog1.__init__(self, name) # 也可以指定呼叫父類的建構子

dog = Dog2("Jimmy")
dog.eat()

dog = Dog3("Harry", "female")
dog.eat()

Dog2 繼承 Dog1,Dog2 建構時使用 super() 來呼叫父類建構子,
Dog3 繼承 Dog1,Dog3 建構時是直接指定呼叫 Dog1 父類的建構子,
結果輸出如下,

1
2
3
4
5
6
Dog2  Jimmy
Dog1 Jimmy
Dog2 class eat method is called.
Dog3 Harry female
Dog1 Harry
Dog1 class eat method is called.

以上就是 Python inheritance 繼承的基本觀念與用法的介紹,下一篇會來介紹 Python 多重繼承

參考
Classes — Python 3.9.0 documentation
https://docs.python.org/3/tutorial/classes.html#inheritance
Python 繼承 543. 相信寫 OOP 的人對於繼承這個概念應該不陌生,Python 身為一個支援… | by Dboy Liao | Medium
https://medium.com/@dboyliao/python-%E7%B9%BC%E6%89%BF-543-bc3d8ef51d6d
[Python物件導向]Python繼承(Inheritance)實用教學
https://www.learncodewithmike.com/2020/01/python-inheritance.html

其它相關文章推薦
如果你想學習 Python 相關技術,可以參考看看下面的文章,
Python 多重繼承
Python 新手入門教學懶人包
Python str 字串用法與範例
Python list 串列用法與範例
Python set 集合用法與範例
Python dict 字典用法與範例
Python tuple 元組用法與範例
Python 字串分割 split
Python 取代字元或取代字串 replace
Python 讓程式 sleep 延遲暫停時間