在软件工程中,接口是一种软件架构模式。它类似于一个类,但其方法只有原型签名定义而不包含任何可执行代码或实现体。任何继承该接口的类都必须实现所需的功能。
定义中不包含任何可执行代码的方法被称为抽象方法。
Python 中的接口
在像 Java 和 Go 这样的语言中,有一个叫做 interface
的关键字用于定义接口。Python 并没有这样的关键字或类似的关键词。它使用抽象基类(简称 ABC 模块)和 @abstractmethod
装饰器来创建接口。
注意:在 Python 中,抽象类也是使用 ABC 模块创建的。
在 Python 中,抽象类和接口看起来很相似。两者之间的唯一区别在于抽象类可能包含一些非抽象方法,而接口中的所有方法都必须是抽象的,并且实现类必须覆盖所有的抽象方法。
实现 Python 接口的规则
在创建和实现 Python 接口时,我们需要考虑以下几点:
-
-
-
-
如果一个类没有实现接口中定义的所有方法,那么该类必须被声明为抽象类。
实现接口的方法
我们可以通过两种方式创建和实现接口:
正式接口
在 Python 中,正式接口是使用抽象基类(ABC)来实现的。为了使用此类,您需要从 abc
模块导入它。
示例
在这个示例中,我们创建了一个带有两个抽象方法的正式接口。
from abc import ABC, abstractmethod
class demoInterface(ABC):
@abstractmethod
def method1(self):
print("抽象方法1")
return
@abstractmethod
def method2(self):
print("抽象方法2")
return
让我们提供一个实现了上述接口中所有抽象方法的类。
class concreteclass(demoInterface):
def method1(self):
print("这是 method1")
return
def method2(self):
print("这是 method2")
return
obj = concreteclass()
obj.method1()
obj.method2()
输出 当您执行此代码时,它将产生以下输出:
这是 method1
这是 method2
非正式接口
在 Python 中,非正式接口指的是那些具有可以被重载的方法的类。然而,编译器无法严格强制实现提供的所有方法。
这种类型的接口基于鸭子类型原则。它允许我们在不检查对象类型的情况下调用任何方法,只要该方法存在即可。
示例
在下面的示例中,我们演示了非正式接口的概念。
class demoInterface:
def displayMsg(self):
pass
class newClass(demoInterface):
def displayMsg(self):
print("这是我的消息")
obj = newClass()
obj.displayMsg()
输出 运行上述代码后,它将产生以下输出:
这是我的消息