多型性(polymorphism)是物件導向中的一個重要概念,它指的是同一個方法或函式在不同的物件類別中可以有不同的行為。在 Python 中,多型性通常是通過繼承和方法重寫(method overriding)來實現的。
主要是為了不同資料類型的實體提供統一的介面,我們藉由下面的程式範例來多理解這個概念吧
舉例來說,假設有一個 Shape
類別,它有一個名為 area
的方法來計算形狀的面積。然後衍生出了不同的形狀類別,如 Circle
和 Rectangle
,它們都擁有 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
,但沒有實際的實作。然後我們創建了兩個具體的形狀類別 Circle
和 Rectangle
,並在這些類別中實作了 area
方法來計算面積。
接著,我們創建了一個 Circle
和 Rectangle
的物件,並使用統一的 area
方法來計算它們的面積。即使 circle
和 rectangle
是不同類型的物件,但由於它們都是 Shape
的子類別並且實作了 area
方法,因此可以使用相同的介面來操作它們,這就展示了多型性的特性。
當我們需要計算不同形狀的面積時,可以創建不同形狀的物件,然後透過統一的 area
方法來計算面積,而不需要關心具體是哪種形狀。
這樣的設計使得程式碼更加靈活和可擴展,同時也符合物件導向設計的抽象化原則,讓不同類型的物件能夠提供統一的介面,降低程式碼的耦合性。
[Python基礎]裝飾器AbstractMethods 定義抽象方法