Python - 抽象



抽象面向物件程式設計的重要原則之一。它指的是一種程式設計方法,只公開物件的相關資料,隱藏所有其他細節。這種方法有助於降低複雜性並提高應用程式開發效率。

Python 抽象的型別

抽象有兩種型別。一種是資料抽象,其中原始資料實體透過可以內部處理隱藏資料實體的資料結構隱藏起來。另一種型別稱為過程抽象。它指的是隱藏過程的底層實現細節。

Python 抽象類

在面向物件程式設計術語中,如果一個類不能被例項化,也就是說你不能擁有一個抽象類的物件,那麼這個類就被稱為抽象類。但是,你可以將它用作構建其他類的基類或父類。

建立抽象類

要在 Python 中建立抽象類,它必須繼承 ABC 模組中定義的 ABC 類。此模組可在 Python 的標準庫中找到。此外,該類必須至少有一個抽象方法。同樣,抽象方法是不能被呼叫但可以被重寫的方法。你需要用@abstractmethod裝飾器來裝飾它。

示例:建立抽象類

from abc import ABC, abstractmethod
class demo(ABC):
   @abstractmethod
   def method1(self):
      print ("abstract method")
      return
   def method2(self):
      print ("concrete method")

demo 類繼承了 ABC 類。有一個 method1() 方法是抽象方法。請注意,該類可能還有其他非抽象(具體)方法。

如果你嘗試宣告 demo 類的物件,Python 將引發 TypeError -

   obj = demo()
         ^^^^^^
TypeError: Can't instantiate abstract class demo with abstract method method1

此處的demo類可以用作另一個類的父類。但是,子類必須重寫父類中的抽象方法。否則,Python 將丟擲此錯誤:

TypeError: Can't instantiate abstract class concreteclass with abstract method method1

抽象方法重寫

因此,以下示例給出了具有重寫抽象方法的子類:

示例

from abc import ABC, abstractmethod
class democlass(ABC):
   @abstractmethod
   def method1(self):
      print ("abstract method")
      return
   def method2(self):
      print ("concrete method")

class concreteclass(democlass):
   def method1(self):
      super().method1()
      return
      
obj = concreteclass()
obj.method1()
obj.method2()

輸出

執行此程式碼時,將產生以下輸出:

abstract method
concrete method
廣告