Python 简明教程
Python - Interfaces
在软件工程中, interface 是一种软件架构模式。它类似于一个类,但它的方法只有原型签名定义,没有任何可执行代码或实现体。必需的功能必须通过继承接口的任何类的某些方法来实现。
Interfaces in Python
在 Java 和 Go 等语言中,都有一个称为 interface 的关键字,用于定义接口。Python 没有它或任何类似的关键字。它使用抽象基类(简称 ABC 模块)和 @abstractmethod 装饰器来创建接口。
NOTE: 在 Python 中,抽象类也是使用 ABC 模块创建的。
在 Python 中,抽象类和接口看起来类似。两者的唯一区别是抽象类可能有一些非抽象方法,而接口中的所有方法都必须是抽象的,并且实现类必须重写所有抽象方法。
Rules for implementing Python Interfaces
在 Python 中创建和实现接口时,我们需要考虑以下几点 −
-
在接口内部定义的方法必须是抽象的。
-
不允许创建接口的对象。
-
实现接口的类需要定义该接口的所有方法。
-
如果一个类未实现接口内定义的所有方法,则该类必须声明为抽象类。
Formal Interface
Python 中的正式接口是使用抽象基类 (ABC) 实现的。要使用这个类,你需要从 abc 模块中导入它。
Example
在这个示例中,我们使用两种抽象方法创建了一个正式接口。
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()
Informal Interface
在 Python 中,非正式接口表示的是一个类,其中包含可以被覆盖的方法。然而,编译器无法严格地强制实现所有提供的方法。
这种类型的接口基于鸭子类型化原理工作。只要方法存在,它就可以使我们调用对象上的任何方法,而不用检查其类型。