【1.108】继承----使用场景以及接口继承

1、继承  当 类之间有显著的不同  并且较小的类所是较大类所需的组件  这就用组合

机器人  手臂  身体 脚等

学校  教室 老师 学生  活动等

游戏 武器 角色等

2、当类之间有很多相同的功能,提取相同功能做成基类    这样就用继承较好

动物 类  都有吃喝拉撒  

    猫  汪汪叫  继承 动物类的 吃喝拉撒

 狗  喵喵叫 继承 动物类的 吃喝拉撒

 

 

3、继承同时具有两种含义

1、继承基类的方法  并且做出自己的改变或者扩展

2、声明某个子类兼容于基类  定义一个接口类 并且实现接口中定义方法

 

实际中 1的含义 少用   代码就耦合了  是有害的

第二个含义 就是 接口继承

接口继承 实质上是 要求 做出一个良好的抽象  这个抽象规定了一个兼容接口 使得外部调用者无需关心 具体细节

就可以同样的处理实现了  特定接口 的所有对象

这在程序上  叫 归一化

 

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

就像linux  的泛文件 概念 一样 

所有东西 都可以当文件 处理  不必关心它是内存  磁盘  网络  还是屏幕 

当然对于底层设计  是需要分开 字符设备   块设备  然后做出针对设计  

# 接口继承
# 一切皆文件  文件就是读写  如缺少 就不是一切皆文件的概念
# 这里就是规定好接口继承,但是都要在自己的类里实现基类定义的接口方法
# 限定好来继承的类都要实现我基类的定义好的接口方法
# 接口继承 就是一个方法 就是函数  父类只是规定好了 子类必须实现的方法
# 需要借助abc模块来限制
import abc
class All_file(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def read(self):
        pass

    @abc.abstractmethod
    def write(self):
        pass

class Disk(All_file):
    def read(self):
        print('disk read')

    def write(self):
        print('disk write')

class Cdrom(All_file):
    def read(self):
        print('cdrom read')

    def write(self):
        print('cdrom write')


class Mem(All_file):
    def read(self):
        print('mem read')

    def write(self):
        print('mem write')
#
m1=Mem()
m1.read()
m1.write()

 

posted @ 2016-05-15 17:44  科学小怪癖  阅读(346)  评论(0)    收藏  举报