27.接口类和抽象类(@abstractclassmethod)

接口类:python原生不支持的,支持多继承,接口类中的所有方法都必须不能实现

抽象类:python原生支持的,不支持多继承,抽象类中的方法可以有一些代码的实现

抽象类:

把一个类变成抽象类,给父类属性添加@abstractclassmethod后,就必须在其子类中也实现相同的方法,限制子类必须实现某些方法

from abc import abstractclassmethod,ABCMeta

class Swim_Animal(metaclass=ABCMeta):
    @abstractclassmethod
    def swim(self):  #父类的函数不需要实现任何功能,但是子类必须实现定义该功能
        pass

抽象类也是一种规范
一般情况下,单继承中函数能实现的功能都是一样的
多继承的情况,由于功能比较复杂,不容易抽象出相同的功能的具体实现写在父类中

接口类:

from abc import abstractclassmethod,ABCMeta

class Swim_Animal(metaclass=ABCMeta):
    @abstractclassmethod
    def swim(self):
        pass

class Fly_Animal(metaclass=ABCMeta):
    @abstractclassmethod
    def swim(self):
        pass
class Qingwa(Swim_Animal):
    def swim(self):
        pass
class Tiane(Swim_Animal,Fly_Animal):
    def swim(self):
        pass
    def fly(self):
        pass

接口隔离原则:
使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些不需要的接口
即实现不同的功能,就应该使用不同的函数,继承不同的函数,功能要分开

总结:

抽象类和接口类:都是面向对象的开发规范
python中没有接口类,因为python自带多继承,直接用class来实现接口类,接口类不能实例化
python中支持抽象类,一般情况下,所有的抽象类都是单继承的,抽象类也不能实例化
在Java的角度上看,抽象类和接口类是由区别的:
  Java本来就支持单继承,所以就有了抽象类
  java没有多继承,所以为了接口隔离原则,设计了接口这个概念,支持多继承了
在python的角度来看,两者的区别不明显:
pyhton即支持多继承也支持单继承,所以对于接口类和抽象类的区别不明显
甚至在python中就根本没有内置接口类

 

posted @ 2020-10-22 22:48  maday  阅读(589)  评论(0)    收藏  举报