[Python基礎]類別繼承(Inheritance)

更新於 發佈於 閱讀時間約 7 分鐘

[Python基礎]淺談類別

先前淺談了類別的用法,這次要在來研究一下類別繼承的概念。

延續蛋糕的案例的概念,同樣為食物,所以可以由食物當作父類別來延伸,蛋糕則是食物的子類別,若同樣為食物一定有相同的方法(函式)是固定的跟名字(屬性),可以讓子類別(蛋糕)繼承沿用,然後也有其他子類別也可以繼承這些方法名字,例如麵食或麵包

我們畫一張圖,來理理這之間的關係,先有個草圖的概念,我們在用後面的程式範例來解說。

類別繼承圖

類別繼承圖

程式範例

同樣都繼承了,屬性self.name = name,方法describe,只是子類別可以改寫其方法跟屬性。

class Food:
def __init__(self, name):
self.name = name

def describe(self):
return f"這是一個{self.name}."

class Bread(Food):
def __init__(self, name, bread_type):
super().__init__(name)
self.bread_type = bread_type

def describe(self):
return f"這是一個 {self.name} 屬於 {self.bread_type} 類型."

class Cake(Food):
def __init__(self, name, flavor):
super().__init__(name)
self.flavor = flavor

def describe(self):
return f"這是一個 {self.name} 口味是 {self.flavor} 口味."

class Noodle(Food):
def __init__(self, name, noodle_type):
super().__init__(name)
self.noodle_type = noodle_type

def describe(self):
return f"這是一個 {self.name} 口味是 {self.noodle_type} 麵食."

Wheat_bread = Bread("麵包", "全麥")
Chocolate_cake = Cake("蛋糕", "巧克力")
Ramen_noodle = Noodle("麵食", "拉麵")

print(Wheat_bread.describe()) # 這是一個 麵包 屬於 全麥 類型.
print(Chocolate_cake.describe()) # 這是一個 蛋糕 口味是 巧克力 口味.
print(Ramen_noodle.describe()) # 這是一個 麵食 口味是 拉麵 麵食.
raw-image

這樣以上的範例,看不出來繼承有什麼優點,好像也沒少打幾行程式碼,讓我們試著擴展這個例子,以更明顯地展示類別繼承的一些優勢。

我們先來考慮以下情境:每種食物都有價格,並且可以進行烹飪。我們將引入新的概念來處理這些方面。

在父類別新增self.price = price這個屬性及cook這個方法,讓子類別繼承使用。

class Food:
def __init__(self, name, price):
self.name = name
self.price = price

def describe(self):
return f"這是一個{self.name}."

def cook(self):
return f"正在烹飪 {self.name}."

class Bread(Food):
def __init__(self, name, bread_type,price):
super().__init__(name,price)
self.bread_type = bread_type

def describe(self):
return f"這是一個 {self.name} 屬於 {self.bread_type} 類型."

class Cake(Food):
def __init__(self, name, flavor,price):
super().__init__(name, price)
self.flavor = flavor

def describe(self):
return f"這是一個 {self.name} 口味是 {self.flavor} 口味."

class Noodle(Food):
def __init__(self, name, noodle_type,price):
super().__init__(name,price)
self.noodle_type = noodle_type

def describe(self):
return f"這是一個 {self.name} 口味是 {self.noodle_type} 麵食."

Wheat_bread = Bread("麵包", "全麥", 50)
Chocolate_cake = Cake("蛋糕", "巧克力", 100)
Ramen_noodle = Noodle("麵食", "拉麵", 150)

print(Wheat_bread.describe()) # 這是一個 麵包 屬於 全麥 類型.
print(Chocolate_cake.describe()) # 這是一個 蛋糕 口味是 巧克力 口味.
print(Ramen_noodle.describe()) # 這是一個 麵食 口味是 拉麵 麵食.

print(Wheat_bread.cook()) #正在烹飪 麵包.
print(Chocolate_cake.cook())#正在烹飪 蛋糕.
print(Ramen_noodle.cook())#正在烹飪 麵食.
raw-image

這樣,透過繼承,我們可以更容易地管理不同食物共享特徵(共享方法),同時保持結構的清晰性。在真實的應用中,這種設計有助於代碼的擴展維護

總結

繼承是物件導向程式設計(OOP)中的核心概念之一,重點:

  1. 基本概念:
    • 繼承允許一個類別子類別)從另一個類別(父類別繼承屬性和方法
    • 父類別是被繼承的類別,子類別是進行繼承的類別。
  2. 類別層次結構:
    • 通過繼承,可以建立一個類別的層次結構,形成父子關係。
  3. 程式碼重用:
    • 子類別可以繼承父類別的屬性和方法,實現程式碼重用。
  4. 覆寫和擴展:
    • 子類別可以覆寫父類別中的方法,提供自己的實現。
    • 子類別還可以擴展父類別方法,增加額外的功能。
  5. 清晰結構:
    • 繼承有助於組織代碼結構,形成清晰的層次結構,使代碼更易於理解和維護。


一天多了解一點,持續精進就會讓自己更強


留言
avatar-img
留言分享你的想法!
avatar-img
螃蟹_crab的沙龍
149會員
293內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。
螃蟹_crab的沙龍的其他內容
2025/04/25
在 Python 中,字典(dict)是非常常用的資料結構,用來儲存 key-value 配對。而在操作字典時,.setdefault() 是一個常被忽略但非常實用的方法。 這篇文章會完整介紹 .setdefault() 的語法、用途、與實務範例,幫助你更有效率地處理字典資料。 什麼是 .se
Thumbnail
2025/04/25
在 Python 中,字典(dict)是非常常用的資料結構,用來儲存 key-value 配對。而在操作字典時,.setdefault() 是一個常被忽略但非常實用的方法。 這篇文章會完整介紹 .setdefault() 的語法、用途、與實務範例,幫助你更有效率地處理字典資料。 什麼是 .se
Thumbnail
2025/01/30
Python 程式在電腦上的執行流程 當我們在電腦上執行 Python 程式時,主要經歷以下幾個步驟: 1. 編寫 Python 程式碼 開發者使用文字編輯器或 IDE(如 VS Code、PyCharm)撰寫 Python 程式,並將其存為 .py 檔案。 例如,一個簡單的 Python
Thumbnail
2025/01/30
Python 程式在電腦上的執行流程 當我們在電腦上執行 Python 程式時,主要經歷以下幾個步驟: 1. 編寫 Python 程式碼 開發者使用文字編輯器或 IDE(如 VS Code、PyCharm)撰寫 Python 程式,並將其存為 .py 檔案。 例如,一個簡單的 Python
Thumbnail
2024/10/17
在一個典型的程式專案中,UI、Controller 和 Main 的分工通常遵循 MVC 模型(Model-View-Controller) 的架構,這是一種常見的設計模式,能夠將應用程式的邏輯和界面進行分離。 大部分典型的程式專案設計: UI (View):專注於用戶界面,展示數據,並將用
Thumbnail
2024/10/17
在一個典型的程式專案中,UI、Controller 和 Main 的分工通常遵循 MVC 模型(Model-View-Controller) 的架構,這是一種常見的設計模式,能夠將應用程式的邏輯和界面進行分離。 大部分典型的程式專案設計: UI (View):專注於用戶界面,展示數據,並將用
Thumbnail
看更多
你可能也想看
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
在使用類別創建實例時,輸入的屬性的都要定義好資料型態,例如dog_1 = Dog("Buddy", 3),有沒有輸入一段字串讓他自己判斷的方法阿? 有的就是使用classmethod: classmethod 是一種裝飾器,它用於定義類別方法。類別方法與實例方法不同,它們被綁定到類別而不是實例。
Thumbnail
在使用類別創建實例時,輸入的屬性的都要定義好資料型態,例如dog_1 = Dog("Buddy", 3),有沒有輸入一段字串讓他自己判斷的方法阿? 有的就是使用classmethod: classmethod 是一種裝飾器,它用於定義類別方法。類別方法與實例方法不同,它們被綁定到類別而不是實例。
Thumbnail
[Python基礎]淺談類別 先前淺談了類別的用法,這次要在來研究一下類別繼承的概念。 延續蛋糕的案例的概念,同樣為食物,所以可以由食物當作父類別來延伸,蛋糕則是食物的子類別,若同樣為食物一定有相同的方法(函式)是固定的跟名字(屬性),可以讓子類別(蛋糕)來繼承沿用,然後也有其他子類別也可以繼承
Thumbnail
[Python基礎]淺談類別 先前淺談了類別的用法,這次要在來研究一下類別繼承的概念。 延續蛋糕的案例的概念,同樣為食物,所以可以由食物當作父類別來延伸,蛋糕則是食物的子類別,若同樣為食物一定有相同的方法(函式)是固定的跟名字(屬性),可以讓子類別(蛋糕)來繼承沿用,然後也有其他子類別也可以繼承
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News