Python - 介面



在軟體工程中,介面是一種軟體架構模式。它類似於類,但其方法只有原型簽名定義,沒有任何可執行程式碼或實現體。任何繼承介面的類的任何方法都必須實現所需的功能。

沒有可執行程式碼定義的方法稱為抽象方法。

Python 中的介面

在 Java 和 Go 等語言中,有一個名為 interface 的關鍵字用於定義介面。Python 沒有它或任何類似的關鍵字。它使用抽象基類(簡稱 ABC 模組)和@abstractmethod 裝飾器來建立介面。

注意:在 Python 中,抽象類也是使用 ABC 模組建立的。

在 Python 中,抽象類和介面看起來很相似。兩者唯一的區別在於抽象類可能有一些非抽象方法,而介面中的所有方法都必須是抽象的,並且實現類必須重寫所有抽象方法。

實現 Python 介面的規則

在 Python 中建立和實現介面時,我們需要考慮以下幾點:

  • 介面內定義的方法必須是抽象的。
  • 不允許建立介面的物件。
  • 實現介面的類需要定義該介面的所有方法。
  • 如果類沒有實現介面內定義的所有方法,則該類必須宣告為抽象類。

在 Python 中實現介面的方法

我們可以透過兩種方式建立和實現介面:

  • 正式介面
  • 非正式介面

正式介面

Python 中的正式介面是使用抽象基類 (ABC) 實現的。要使用此類,需要從abc 模組匯入它。

示例

在這個示例中,我們建立了一個具有兩個抽象方法的正式介面。

from abc import ABC, abstractmethod

# creating interface
class demoInterface(ABC):
   @abstractmethod
   def method1(self):
      print ("Abstract method1")
      return

   @abstractmethod
   def method2(self):
      print ("Abstract method1")
      return

讓我們提供一個實現這兩個抽象方法的類。

# class implementing the above interface
class concreteclass(demoInterface):
   def method1(self):
      print ("This is method1")
      return
   
   def method2(self):
      print ("This is method2")
      return

# creating instance      
obj = concreteclass()

# method call
obj.method1()
obj.method2()

輸出

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

This is method1
This is method2

非正式介面

在 Python 中,非正式介面是指一個具有可以被重寫的方法的類。但是,編譯器不能嚴格執行所有提供的方法的實現。

這種型別的介面基於鴨子型別原則。只要方法存在,它允許我們呼叫物件上的任何方法而無需檢查其型別。

示例

在下面的示例中,我們演示了非正式介面的概念。

class demoInterface:
   def displayMsg(self):
      pass

class newClass(demoInterface):
   def displayMsg(self):
      print ("This is my message")
  
# creating instance      
obj = newClass()

# method call
obj.displayMsg()

輸出

執行上述程式碼後,將產生以下輸出:

This is my message
廣告