iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0
Software Development

玩轉 Python 與 MongoDB系列 第 22

玩轉 Python 與 MongoDB_Day22_物件導向設計-多型

  • 分享至 

  • xImage
  •  

今天我們要來介紹一下多型的觀念,我們可以利用這個方式寫一個 BaseCollection 物件,搭配 Pydantic 來進行類似 ORM 的操作,方便我們取用 MongoDB 的資料,今天我們先針對多型的觀念來做介紹

一、多型觀念簡介

多型是面向對象程式設計(OOP)中的一個重要概念,它允許不同的物件對相同的方法名稱進行不同的實現。多型意味著相同的接口可以有不同的實現方式,這提高了程式的靈活性和可擴展性。以下是多型的簡介:

  1. 方法重載(Method Overloading):多型的一種形式是方法重載,它允許在同一個類別中定義具有相同名稱但不同參數的方法。根據方法的參數列表,選擇合適的方法進行調用。

  2. 方法覆寫(Method Overriding):另一種多型的形式是方法覆寫,它發生在繼承關係中。子類別可以覆寫父類別的方法,以提供自己的實現。當呼叫方法時,將調用子類別的實現。

  3. 抽象類別與介面(Abstract Classes and Interfaces):多型的一種常見應用是抽象類別和介面。抽象類別可以包含一些方法的實作,但也可以有一些未實作的抽象方法,這些方法需要在派生類別中實作。介面是一種純抽象的定義,它只包含方法的簽名,具體實作由實現該介面的類別提供。

  4. 運算符多載(Operator Overloading):某些程式語言允許使用者自定義運算符的行為,這種概念稱為運算符多載。這意味著您可以為不同的類別定義相同的運算符,但其行為可以不同。

  5. 動態繫結(Dynamic Binding):多型的一個重要特性是動態繫結。這表示在運行時,根據物件的實際型別來決定要調用哪個方法實作。這提供了更大的靈活性,因為您可以在不修改程式碼的情況下替換不同的物件。

  6. 多型性質(Polymorphic Properties):多型使得程式碼更容易理解和維護,因為它允許使用者關注接口而不是特定的實現細節。這有助於實現程式碼的模組化和重用性。

總之,多型是面向對象程式設計的核心概念之一,它允許不同的物件以相同的方式互動,同時具有不同的實現方式。這提高了程式碼的可擴展性、維護性和可讀性。

二、範例

當您使用 "Base" 或基底類別時,多型(polymorphism)是一個自然的結果,因為派生類別可以覆寫基底類別的方法,並以自己的方式實現這些方法。以下是一個簡單的 Python 多型範例,使用基底類別:

# 定義基底類別 Animal
class Animal:
    def speak(self):
        pass

# 派生類別 Dog
class Dog(Animal):
    def speak(self):
        return "汪汪汪!"

# 派生類別 Cat
class Cat(Animal):
    def speak(self):
        return "喵喵喵!"

# 使用多型
def animal_sound(animal):
    return animal.speak()

# 創建不同的動物實例
dog = Dog()
cat = Cat()

# 使用多型呼叫 speak 方法,具體實現取決於動物的類型
print(animal_sound(dog))  # 輸出:汪汪汪!
print(animal_sound(cat))  # 輸出:喵喵喵!

在這個例子中,Animal 是基底類別,它定義了一個方法 speak。然後,DogCat 是派生類別,它們覆寫了 speak 方法以返回不同的聲音。透過 animal_sound 函式,我們可以以相同的方式呼叫 speak 方法,但具體的實現取決於動物的類型,這就是多型的體現。

這個範例展示了如何使用基底類別和派生類別實現多型,這是物件導向程式設計的一個重要概念,它允許不同的物件對相同的方法呼叫進行不同的實現。


上一篇
玩轉 Python 與 MongoDB_Day21_MongoMock 與測試
下一篇
玩轉 Python 與 MongoDB_Day23_多型與 pymongo
系列文
玩轉 Python 與 MongoDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言