iT邦幫忙

0

Python 與設計模式學習心路歷程 - 類別 & 繼承

  • 分享至 

  • xImage
  •  

一、簡介

想必在寫程式的過程中,大家或多或少都有聽過所謂物件導向 (Object Oriented Programming) 的觀念,也就是所謂的 OOP,甚至在業界內流傳著"想提早下班,請學好 OOP",接下來的文章會記錄著筆者學習設計模式的心路歷程,如果在觀念上有錯或是有甚麼問題想討論的,都歡迎留言討論

另外每篇文章使用到的 code 都會同步推上筆者的 GitHub 歡迎大家取用參考

二、類別

在開始講設計模式之前,我們先來認識一下類別以及 OOP 的觀念,OOP 最大的三個核心觀念就是 "封裝"、"繼承"、"多型",下面我們會先從甚麼是類別開始依序介紹

類別其實是直接從他的英文 class 直接翻譯過來的,因此與其稱呼她為類別,不如直接叫他物件,也就是物件導向中的物件本人,下面就讓我們看看在 Python 中怎麼要建立一個物件

class House:
    floor: int
    color: str

    def __init__(self, floor: int, color: str):
        self.floor = floor
        self.color = color

    def __str__(self):
        return f"這是個樓高 {self.floor} 層,顏色為 {self.color} 的房子"


house = House(floor=10, color="red")
print(house)

上面的程式當中可以分三塊進行解釋

  • 屬性部分:

    可以看到在 House 這個物件當中我們設定了兩個屬性,分別為 floor 和 color

  • __init__ 部分:

    這個部分用來控制,當今天我們在實體化這個物件的時候,我們需要傳入甚麼樣的參數來建立,並且做一些預處理,此處單純將傳入的 floor 以及 color 設定給物件自身

  • __str__ 部分:

    這個部份用來控制,當今天使用 print 印出這個物件的時候,會印出什麼,是 python 內的寫法

下圖為執行上述程式後終端機的結果

https://ithelp.ithome.com.tw/upload/images/20230114/20144024TSnpAesoeq.jpg

三、繼承

若 B 類別繼承了 A 類別,則稱 A 類別為 B 的父類別,B 為 A 的子類別,而子類別會擁有父類別所擁有的 function 以及 attribute (私有性質的除外),也可以改寫父類別的 function,而在 python 當中想要繼承某個類別,則只需要在新建立的類別後面用括號加上想繼承的父類別名稱即可,下方付上範例

class BaseHouse:
    floor: int
    color: str

    def __init__(self, floor: int, color: str):
        self.floor = floor
        self.color = color

    def __str__(self):
        return f"這是個樓高 {self.floor} 層,顏色為 {self.color} 的房子"


class Apartment(BaseHouse):

    def __str__(self):
        return f"這是一個樓高 {self.floor} 層的公寓,顏色為 {self.color}"


class Skyscraper(BaseHouse):

    def __str__(self):
        return f"這是一個樓高 {self.floor} 層的摩天大樓,顏色為 {self.color}"


apartment = Apartment(floor=10, color="red")
skyscraper = Skyscraper(floor=101, color="green")

print(apartment)
print(skyscraper)

上方的程式當中我們可以看到,筆者先建立一個 BaseHouse 作為房子的基本類別,並於下方建立 Apartment 以及 Skyscraper 兩個類別且繼承 BaseHouse,這樣我們可以確保繼承 BaseHouse 的類別都會有 color 以及 floor 這兩個屬性,並於兩個子類別中修改 __str__ 中回傳的內容

下圖為執行結果

https://ithelp.ithome.com.tw/upload/images/20230114/20144024d9HM4Ejl24.jpg


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言