iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0
Software Development

Python 微進階系列 第 22

Python 微進階 Day22 - class(類別) - 6 - @abstractmethod、polymorphism

  • 分享至 

  • xImage
  •  

class(類別)

abstract method(抽象方法)

  • abstract method(抽象方法):
    • 要先 import abstract base class 相關的套件,from abc import ABC, abstractmethod
    • 在類別上繼承 ABC 類別
    • 在方法上方,使用 @abstractmethod 修飾器建立抽象方法
  • 有抽象方法的類別就稱為抽象類別,這個類別無法建立物件
  • 抽象方法內不會有實作內容,需透過繼承這個抽象類別的方式來實作新的內容
from abc import ABC, abstractmethod

class A(ABC):
    @abstractmethod
    def base(self):
        pass

a = A()    
# 錯誤
# TypeError: Can't instantiate abstract class A with abstract methods base

class ModeB(A):
# 透過繼承抽象類別 A
    def base(self):
        print("Mode B")
        # 新的內容

b = ModeB()

b.base()
# Mode B

polymorphism(多型)

  • 不同的類別在使用同一個方法時,透過方法覆寫而會有不同的結果
  • 透過不同的類別各自繼承抽象類別,對同一個方法進行不同內容的實作
  • 主要具有比較容易擴充,並且可以讓類別之間的關聯性降低
from abc import ABC, abstractmethod

class A(ABC):
    @abstractmethod
    def base(self):
        pass

class ModeB(A):
    
    def base(self):
        print("Mode B")

class ModeC(A):
    
    def base(self):
        print("Mode C")
        
b = ModeB()
c = ModeC()
b.base()
# Mode B
c.base()
# Mode C

參考資料

次回

明天將最近幾天的類別內容做一個彙整


上一篇
Python 微進階 Day21 - class(類別) - 5 - inheritance
下一篇
Python 微進階 Day23 - class(類別) - 彙整
系列文
Python 微進階31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言