iT邦幫忙

2024 iThome 鐵人賽

DAY 18
1
自我挑戰組

每日挑戰:從零開始的 Python 學習之旅系列 第 18

【Day 18】進階語法 - 物件導向概念篇 - 續集

  • 分享至 

  • xImage
  •  

Hi 大家好,

今天要開始介紹基礎語法中的物件導向篇之續集,那我們開始吧!

類別抽象方法(Abstract Method)

抽象方法

Q: 什麼是抽象方法
A: 指的是在上層類別中,只先定義但沒有具體實現的方法,然後在子類別必須要實現這些方法。

  • abc模組

    • 是一個特殊的模組,用來定義抽象基底類別(ABC),也提供了@abstractmethod裝飾器可以使用
    • 定義一個Shape類別,繼承ABC模組,使用@abstractmethod裝飾器定義抽象方法
    from abc import ABC, abstractmethod
    
    class Shape(ABC):
        # 定義抽象基底類別
        @abstractmethod
        def area(self):   <==== 只有定義抽象方法,未具體實現方法內容
            pass
    
    • 多個類別SquareCircle繼承上層類別Shape,並且實作抽象方法 area(self)
    # Square 類別實現 Shape 抽象方法
    class Square(Shape):
        def __init__(self, side_length):
            self.side_length = side_length
    
        def area(self):    <==== 實現抽象方法內容
            return self.side_length ** 2
    
    # Circle 類別實現 Shape 抽象方法
    class Circle(Shape):
        def __init__(self, radius):
            self.radius = radius
    
        def area(self):    <==== 實現抽象方法內容
            return 3.14 * self.radius ** 2
    
    • 類別實體化
    square = Square(side_length=10)
    circle = Circle(radius=20)
    
    • 使用從各類別中實現具體邏輯的area()方法,印出結果
    print(square.area())
    print(circle.area())
    
    • 最後印出的結果
    PS D:\Project\practice> python hi.py
    100
    1256.0
    PS D:\Project\practice>
    

魔術方法(Magic Methods)

Q: 什麼是魔術方法?
A: 常被當作是Python的黑魔法,不需要去重新定義或架構一個方法,直接使用即可,或是在特殊形況下Python會自動調用,是已經存在且綁定在類別中的特殊方法。

  • 定義方式

    • 以雙底線__開頭和結尾的方法
  • 如何使用

    • 通常如果要實作add()方法,可以使用以下方式來達成
    class Point:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        # 定義加的方法
        def add(self):
            return self.x + self.y
    
    point = Point(2, 3)
    result = point.add()
    print(result)
    
    PS D:\Project\practice> python hi.py
    5
    PS D:\Project\practice>
    
    • 可以使用黑魔法方式來達成
    class Point:
        def __init__(self, value):
            self.value = value
    
        # 定義物件的字串表示
        def __str__(self):
            return f'Value: {self.value}'
    
         # 定義加法行為
        def __add__(self, other):
            return Point(self.value + other.value)
    
        # 定義等於行為
        def __eq__(self, other):
            return self.value == other.value
    
    # 創建兩個 Point 物件   
    point_a = Point(2)
    point_b = Point(3)
    
    # 使用__str__黑魔法
    print(point_a)
    print(point_b)
    
    # 使用__add__黑魔法
    print(point_a + point_b)
    
    # 使用__eq__黑魔法
    print(point_a == point_b)
    
    PS D:\Project\practice> python hi.py
    Value: 2   <==== 使用__str__黑魔法
    Value: 3   <==== 使用__str__黑魔法
    Value: 5   <==== 使用__add__黑魔法
    False      <==== 使用__eq__黑魔法
    PS D:\Project\practice>
    

那今天就介紹到這裡,我們明天見~


上一篇
【Day 17】進階語法 - 物件導向概念篇
下一篇
【Day 19】進階語法 - 物件導向概念篇 - 續集
系列文
每日挑戰:從零開始的 Python 學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言