Python - 接口


在软件工程中,界面是一种软件架构模式。接口就像一个类,但它的方法只有原型签名定义,没有任何要实现的主体。推荐的功能需要由具体的类来实现。

在Java等语言中,有interface关键字,可以很容易地定义接口。Python 没有它或任何类似的关键字。因此,使用与抽象类中相同的 ABC 类和 @abstractmethod 装饰器。

抽象类和接口在 Python 中看起来很相似。两者唯一的区别是抽象类可以有一些非抽象方法,而接口中的所有方法都必须是抽象的,并且实现类必须重写所有抽象方法。

例子

from abc import ABC, abstractmethod
class demoInterface(ABC):
   @abstractmethod
   def method1(self):
      print ("Abstract method1")
      return

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

上面的接口有两个抽象方法。与抽象类一样,我们无法实例化接口。

   obj = demoInterface()
         ^^^^^^^^^^^^^^^
TypeError: Can't instantiate abstract class demoInterface with abstract methods method1, method2

让我们提供一个实现这两个抽象方法的类。如果不包含所有抽象方法的实现,Python 将显示以下错误 -

   obj = concreteclass()
         ^^^^^^^^^^^^^^^
TypeError: Can't instantiate abstract class concreteclass with abstract method method2

下面的类实现了这两种方法 -

class concreteclass(demoInterface):
   def method1(self):
      print ("This is method1")
      return
   
   def method2(self):
      print ("This is method2")
      return
      
obj = concreteclass()
obj.method1()
obj.method2()

输出

当您执行此代码时,它将产生以下输出 -

This is method1
This is method2