5.17—025—周五

今日所学内容

    一、继承的另一种使用方法

    二、super()的使用 与 mro列表(py2中没有)

    三、组合

    四、菱形继承

    五、接口与抽象类

    六。鸭子类型

一、继承的另一种使用方法

  最常见的是直接继承一个已经存在的类

  当你想要创建一个新的类 发现这个类中的一些 在某一个类中已经存在

  那就没有必要从头开始写 ,可以直接继承已有的类 然后做补充

二、super()的使用 与 mro列表(py2中没有)

  python 支持多继承,一个类可以同时继承多个父类好处是更加灵活

问题是:属性的查找顺序该怎么确定

当多继承时如果多个父类中出现了同名的属性/函数

你不能用眼睛去判断查找顺序 ,需要使用mro列表来查看真正的继承顺序

总结:super在访问父类属性时 是按照 mro列表 一层层往上找的

三、组合

组合:指的是 一个类把另一个类的对象作为自己的属性 就称之为组合

组合的使用之处 无处不在

当你定义一个类 并且这个类拥有某种类型的属性时 就称之为组合

都是用用来重用代码的方式:

  组合描述的是 什么拥有什么的关系 学生有书 学生有手机
  继承描述的是 什么是什么的关系  猪是动物  狗是动物

四、菱形继承

新式类与经典类

经典类:

新式类:

 

  如果你的代码需要兼容py2 无论是直接还是间接继承,应该直接显示继承的是 object 

多层菱形继承

  使用super调用的所有属性,千万不能通过看代码去查找继承关系,要按照 mro列表 顺序查找继承,mro只能在Python3中使用,Python3中全是新式类

五、接口与抽象类

1、接口

Eg:USB

  电脑内部具备USB相应的功能 如果要使用的话 就必须给外界提供一个使用方式,该方式就称之为接口 ,

在程序中 功能通常是用函数来表示, 对于外界而言 无需清楚函数时如何实现的 只要知道函数名即可, 这个函数名称就可以称之为接口

外界调用接口就能完成某个任务

  接口其实就是一组功能的定义,但是只清楚函数名称,而没有具体的实现细节

相当于是一套规范,

Eg:USB 规定了接口的外观,大小,以及每条线路的功能是什么,硬件开发商照着这个USB协议来生产设备,就可以被电脑使用

好处:使用接口可以提高程序的扩展性,只要对象按照接口规定方法来实现,使用者就可以无差别使用所有对象

2、抽象类

  抽象:指的是 不清楚,不具体,看不懂

  抽象方法: 指的是 没有函数体的方法 用 @abc.abstractmethod 装饰器

    如果类中具备抽象方法,那么这个类就称为抽象类

  抽象类的特点:不能直接实例化 必须有子类覆盖了所有抽象方法后才能实例化子类

3、接口与抽象类的区别

  接口是指只有方法声明而没有实现体 , 接口中所有方法都是抽象的

问题:如果接口的子类没有实现接口中的方法,那是没有任何意义的

抽象类之所以出现的意义:通过抽象类来强行限制子类必须覆盖所有的抽象方法

六。鸭子类型

如果说一个对象叫声像鸭子,走路像鸭子,长得像鸭子,那它就是鸭子

鸭子类型是python 推荐的方式,python不喜欢强行限制你

 

posted @ 2019-05-17 21:27  水天两色  阅读(116)  评论(0)    收藏  举报