Python中的接口和协议
Python语言中没有interface关键词,而且除了抽象基类,每个类都有接口:类实现或继承的公开属性(方法或数据属性)。
接口类:
面向对象中的继承有两种用途:
1)可以通过继承做到代码重用,并完成扩展;
2)接口继承
所谓的接口继承就是定义一个接口类Interface,接口类中定义了一些接口(就是函数,但这些函数都是没有具体的实现),子类继承接口类,并且实现接口中的功能。
接口只是定义了一些方法,而没有去实现,多用于程序设计时,只是设计需要有什么样的功能,但是并没有实现任何功能,这些功能需要被另一个类(B)继承后,由类B去实现其中的某个功能或全部功能。在python中接口由抽象类和抽象方法去实现,接口是不能被实例化的,只能被别的类继承去实现相应的功能。
抽象类
抽象类只能被继承,不能被实例化。如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性。 比如我们有香蕉的类,有苹果的类,有桃子的类,从这些类抽取相同的内容就是水果这个抽象的类,你吃水果时,要么是吃一个具体的香蕉,要么是吃一个具体的桃子。。。。。。你永远无法吃到一个叫做水果的东西。
python中,抽象类和接口类没有明确的界限,若是类中所有的方法都没有实现,则认为是一个接口,若是部分方法实现,则认为是一个抽象类,抽象类和接口类都仅用于被继承,不能被实例化。Python原生只支持抽象列不支持接口类,abc模块就是用来实现抽象类的,当一个抽象中的所有方法都没有实现时,就认为是一个接口类。
参考文献:流畅的python, Luciano Ramalho编著