[Python]多型(polymorphism)的概念

閱讀時間約 3 分鐘

多型性(polymorphism)是物件導向中的一個重要概念,它指的是同一個方法函式不同的物件類別中可以有不同的行為。在 Python 中,多型性通常是通過繼承和方法重寫(method overriding)來實現的。

主要是為了不同資料類型的實體提供統一的介面,我們藉由下面的程式範例來多理解這個概念吧


舉例來說,假設有一個 Shape 類別,它有一個名為 area 的方法來計算形狀的面積。然後衍生出了不同的形狀類別,如 CircleRectangle,它們都擁有 area 方法。

程式範例

import math

class Shape:
def area(self):
raise NotImplementedError("子類別必須實作抽象方法")

class Circle(Shape):
def __init__(self, radius):
self.radius = radius

def area(self):
return math.pi * self.radius ** 2

class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height

def area(self):
return self.width * self.height

# 創建不同形狀的物件
circle = Circle(5)
rectangle = Rectangle(4, 6)

# 使用統一的介面計算面積
print("Circle area:", circle.area()) # 印出:Circle area: 78.53981633974483
print("Rectangle area:", rectangle.area()) # 印出:Rectangle area: 24

在這個範例中,我們首先定義了一個抽象類別 Shape,它有一個抽象方法 area,但沒有實際的實作。然後我們創建了兩個具體的形狀類別 CircleRectangle,並在這些類別中實作了 area 方法來計算面積。

接著,我們創建了一個 CircleRectangle 的物件,並使用統一的 area 方法來計算它們的面積。即使 circlerectangle 是不同類型的物件,但由於它們都是 Shape 的子類別並且實作了 area 方法,因此可以使用相同的介面來操作它們,這就展示了多型性的特性。


當我們需要計算不同形狀的面積時,可以創建不同形狀的物件,然後透過統一的 area 方法來計算面積,而不需要關心具體是哪種形狀。

這樣的設計使得程式碼更加靈活和可擴展,同時也符合物件導向設計的抽象化原則,讓不同類型的物件能夠提供統一的介面,降低程式碼的耦合性。



用抽象類別來實現多型的概念吧,規範子類別要有統一的介面,可參考我以前的另外一篇文章

[Python基礎]裝飾器AbstractMethods 定義抽象方法


51會員
96內容數
Python程式設計師,不是在學習就是在學習的路上
留言0
查看全部
發表第一個留言支持創作者!