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

更新於 2024/01/22閱讀時間約 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
128會員
209內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
本文介紹了Python中zip與enumerate函式的使用,以及它們的語法說明和程式範例。zip函式允許同時迭代多個可迭代對象,這使得程式碼更簡潔;而enumerate函式則在迭代時,提供元素的索引,使得實用工具,尤其是當需要追蹤元素的位置時。
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
有別於上一篇for迴圈[Python基礎]流程控制for迴圈,while迴圈則常常被說是無限迴圈,若未到達跳脫的條件,是不會停止的。 在日常生活中,我們也常常用到這個概念,例如泡奶粉,要一直攪拌到粉都溶解了為止,其中的一直跟為止就等於while迴圈概念一樣,一直做到某個條件滿足了被觸發才停止。
在日常中,常有重複性相當高的事情,不斷地重複在做,重複的事做久就會慢慢變成是一個習慣,這個習慣就會讓人下意識地完成一些事情。 習慣是一種自動化的行為模式,這些行為模式在重複進行的過程中變得固定且容易自動化。 在Python程式語言中,for迴圈就類似這種概念
在人生中總是會遇到許多選擇,做了不同的選擇產生的結果也會不一樣,大多時候都是在為了要吃什麼在抉擇,小孩才做選擇大人全部都要,全部都要何嘗也不是一個選擇。 在Python程式語言中也有選擇的語法,就是If Else,如果是就做什麼,不是就做什麼,有別於其他程式語言,他不一定要有else,可以只有If
本文介紹了Python中zip與enumerate函式的使用,以及它們的語法說明和程式範例。zip函式允許同時迭代多個可迭代對象,這使得程式碼更簡潔;而enumerate函式則在迭代時,提供元素的索引,使得實用工具,尤其是當需要追蹤元素的位置時。
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
有別於上一篇for迴圈[Python基礎]流程控制for迴圈,while迴圈則常常被說是無限迴圈,若未到達跳脫的條件,是不會停止的。 在日常生活中,我們也常常用到這個概念,例如泡奶粉,要一直攪拌到粉都溶解了為止,其中的一直跟為止就等於while迴圈概念一樣,一直做到某個條件滿足了被觸發才停止。
在日常中,常有重複性相當高的事情,不斷地重複在做,重複的事做久就會慢慢變成是一個習慣,這個習慣就會讓人下意識地完成一些事情。 習慣是一種自動化的行為模式,這些行為模式在重複進行的過程中變得固定且容易自動化。 在Python程式語言中,for迴圈就類似這種概念
在人生中總是會遇到許多選擇,做了不同的選擇產生的結果也會不一樣,大多時候都是在為了要吃什麼在抉擇,小孩才做選擇大人全部都要,全部都要何嘗也不是一個選擇。 在Python程式語言中也有選擇的語法,就是If Else,如果是就做什麼,不是就做什麼,有別於其他程式語言,他不一定要有else,可以只有If
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。
Thumbnail
Dictionary(字典) : 是一個可以用來存放不同資料(不同型態)的容器(集合) 每一個元素都是以{鍵(Key):值(Value)}所構成,字典中每個項目都是用","隔開
Thumbnail
在如今的資訊時代,如何有效的獲取並處理數據,成為了許多專業人士和企業的重要需求,爬蟲技術,作為獲取網絡數據的重要工具,其重要性不言而喻,而這篇文章將分享Python爬蟲的基礎,讓你能獲取想要的網頁數據。
Thumbnail
Python 基本語法 python 語法的後綴名是以.py 結尾 python 執行方式 使用交互介面執行 使用 python test.py 命令執行 使用./test.py 執行 python 標示符 以單下劃線開頭的屬性,表示是類的私有屬性(包括方法,變量)。如:_foo表示不能直接訪問的類
詳細原碼: https://reurl.cc/ex8lZm hello world Variable (變數) 輸入 input() 四則運算 列表 list (陣列) 集合 字典(Dictionary) 給值 try 檢驗 取所有值 判斷式 If else 迴圈 Switch //字典方式 CSV
Thumbnail
「VSCode 是世上最棒的 IDE 了吧」這時有人跳出來表示不服,定睛一看原來是那陳年的大哥 Visual Studio,他說道:「用 Windows 做開發的人一定要裝 Visual Studio 這樣專業的 IDE,不要裝其他次等的文字編輯器,才可以有效提升專業度。」
Thumbnail
在上一篇文章中,我們已經準備好製作LINE機器人的工具了,接下來我們就要來做一個最簡單的Python與LINE的串接練習,讓我們的機器人活起來,並且做出最基本的回話功能,如果還沒準備好串接所需的工具,記得先去看《【python】Python+LINE Bot 輕鬆打造股市機器人(二) : 所需準備的
Thumbnail
在我們正式開始Python串接LINE Bot的教程之前,有必要先為大家準備好所需的工具。實際上,製作LINE Bot的工具有很多選擇,我將會介紹我在製作過程中所使用的具體工具有哪些,以及如何進行事前的準備工作。讓我們一起走進這個有趣的製作過程吧!
Thumbnail
每當要研究投資標的時,你是否也會覺得A網站的財報資料完整,又覺得B網站的選股條件完善,又覺得C網站的新聞比較重要,有時身邊又沒有隨身攜帶筆電怎麼好查詢呢?這時可能就在想怎麼沒有人開發一個程式能完成符合我想要的功能啊~~與其求助於人,不如自己動手做最好,有相同煩惱的人,LINE Bot超適合你!!
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。
Thumbnail
Dictionary(字典) : 是一個可以用來存放不同資料(不同型態)的容器(集合) 每一個元素都是以{鍵(Key):值(Value)}所構成,字典中每個項目都是用","隔開
Thumbnail
在如今的資訊時代,如何有效的獲取並處理數據,成為了許多專業人士和企業的重要需求,爬蟲技術,作為獲取網絡數據的重要工具,其重要性不言而喻,而這篇文章將分享Python爬蟲的基礎,讓你能獲取想要的網頁數據。
Thumbnail
Python 基本語法 python 語法的後綴名是以.py 結尾 python 執行方式 使用交互介面執行 使用 python test.py 命令執行 使用./test.py 執行 python 標示符 以單下劃線開頭的屬性,表示是類的私有屬性(包括方法,變量)。如:_foo表示不能直接訪問的類
詳細原碼: https://reurl.cc/ex8lZm hello world Variable (變數) 輸入 input() 四則運算 列表 list (陣列) 集合 字典(Dictionary) 給值 try 檢驗 取所有值 判斷式 If else 迴圈 Switch //字典方式 CSV
Thumbnail
「VSCode 是世上最棒的 IDE 了吧」這時有人跳出來表示不服,定睛一看原來是那陳年的大哥 Visual Studio,他說道:「用 Windows 做開發的人一定要裝 Visual Studio 這樣專業的 IDE,不要裝其他次等的文字編輯器,才可以有效提升專業度。」
Thumbnail
在上一篇文章中,我們已經準備好製作LINE機器人的工具了,接下來我們就要來做一個最簡單的Python與LINE的串接練習,讓我們的機器人活起來,並且做出最基本的回話功能,如果還沒準備好串接所需的工具,記得先去看《【python】Python+LINE Bot 輕鬆打造股市機器人(二) : 所需準備的
Thumbnail
在我們正式開始Python串接LINE Bot的教程之前,有必要先為大家準備好所需的工具。實際上,製作LINE Bot的工具有很多選擇,我將會介紹我在製作過程中所使用的具體工具有哪些,以及如何進行事前的準備工作。讓我們一起走進這個有趣的製作過程吧!
Thumbnail
每當要研究投資標的時,你是否也會覺得A網站的財報資料完整,又覺得B網站的選股條件完善,又覺得C網站的新聞比較重要,有時身邊又沒有隨身攜帶筆電怎麼好查詢呢?這時可能就在想怎麼沒有人開發一個程式能完成符合我想要的功能啊~~與其求助於人,不如自己動手做最好,有相同煩惱的人,LINE Bot超適合你!!