Python的接口和抽象的概念

先举一个例子:

# tiger 走路 游泳
# swan 游泳 飞
# eagle 走路 飞
按照一般的单继承,我们会创建一个Animal的类,然后让tiger,swan,eagle这些类都去继承Animal类。
这样写就会非常麻烦。随着越来越多的动物种类加入,这种写法带来的重复代码非常多,而且也不易维护。
故此时,我们使用了多继承的概念。即将不同的动作抽象成不同的动作类。然后让动物类们来多继承它。
这样代码也易读,易维护,也很规范。
常规写法如下:
class Animal:
    def walk(self):pass
    def swim(self):pass
    def fly(self):pass
tiger=Animal()#由于tiger不会飞,故这样抽成的Animal类直接实例化tiger是不行的。
#改为如下,重复代码仍很多
class Tiger:
      def walk(self):pass
      def swim(self):pass
class swan:
    def swim(self): pass
    def fly(self): pass
....
#再改
from abc import abstractclassmethod,ABCMeta
class Walk_Animal(metaclass=ABCMeta):
    @abstractclassmethod
    def walk(self):pass
class Fly_Animal:
    @abstractclassmethod
    def fly(self):pass
class Swim_Animal:
    @abstractclassmethod
    def swim(self):pass
#让Tiger直接继续走路和游泳技能。为了规范书写,我们在父类中加抽象判断,以便出错时,能够告之程序员按规范创建类。
class Tiger(Walk_Animal,Swim_Animal):pass

JAVA由于不支持多继承,故创造了接口这个概念来解决这个问题。而Python本身是支持多继承的,故在Python中,没有接口这种类,只有这个概念而已,只不过Python中的接口实现,是通过多继承实现的。

metaclass=ABCMeta,以及@abstractclassmethod 其作用是检查子类中的方法是否按父类的名称书写,否则将报错误来提醒程序员。  一般在架构设计时就定了下来。
在这样的父类中,其方法可以写入通用的方法。
posted @ 2019-01-18 13:54  hisweetyGirl  阅读(1523)  评论(0编辑  收藏  举报