彩虹然

rainbow-ran

Python3.7之抽象类与归一化

继承的两种用途:

1.继承基类的方法,并且做出自己的改变或者扩展(代码复用)

2.声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现

接口的功能,子类继承接口类,并且实现接口中的功能。

一、什么是抽象类

与java一样,python也有抽象类的概念,但是需要借助模块实现。抽象类是一个特殊的类,它的特殊之处在于只

能被继承,不能被实例化。

抽象类与普通类的不同之处在于:抽象类中只能有抽象方法(没有实现功能),该类不能被实例化,只能被继承,

且子类必须实现抽象方法。

二、什么是接口

接口可以理解为自己给使用者来调用自己功能方法的入口。

三、为什么要用接口

(1)可以实现权限控制,比如可以通过接口做一下访问控制,可以允许或者拒绝调用者的一些操作。

(2)降低了使用者的使用难度,使用者只需要知道怎么调用即可,不需要知道里边的具体实现方法。

import abc


class Interface(metaclass=abc.ABCMeta):
    # 定义接口Interface类来模仿接口的概念,python中没有interface关键字来定义一个接口。
    @abc.abstractmethod
    def read(self):  # 定接口函数read
        pass

    @abc.abstractmethod
    def write(self):  # 定义接口函数write
        pass


class Txt(Interface):  # 文本,具体实现read和write
    def read(self):
        print('文本数据的读取方法')

    def write(self):
        print('文本数据的读取方法')


class Sata(Interface):  # 磁盘,具体实现read和write
    def read(self):
        print('硬盘数据的读取方法')

    def write(self):
        print('硬盘数据的读取方法')

四、抽象类与接口

抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如all_type)和函数属性(如read、write),而

接口只强调函数属性的相似性。

抽象类是一个介于类和接口直接的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计

五、接口与归一化设计

归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大地降低了使用

者的使用难度。

归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合。

posted @ 2020-01-17 11:18  彩虹然  阅读(1192)  评论(0编辑  收藏  举报