5.17—025—周五
今日所学内容
一、继承的另一种使用方法
二、super()的使用 与 mro列表(py2中没有)
三、组合
四、菱形继承
五、接口与抽象类
六。鸭子类型
一、继承的另一种使用方法
最常见的是直接继承一个已经存在的类
那就没有必要从头开始写 ,可以直接继承已有的类 然后做补充
二、super()的使用 与 mro列表(py2中没有)
python 支持多继承,一个类可以同时继承多个父类好处是更加灵活
问题是:属性的查找顺序该怎么确定
当多继承时如果多个父类中出现了同名的属性/函数
你不能用眼睛去判断查找顺序 ,需要使用mro列表来查看真正的继承顺序
总结:super在访问父类属性时 是按照 mro列表 一层层往上找的
三、组合
组合:指的是 一个类把另一个类的对象作为自己的属性 就称之为组合
组合的使用之处 无处不在
当你定义一个类 并且这个类拥有某种类型的属性时 就称之为组合
都是用用来重用代码的方式:
组合描述的是 什么拥有什么的关系 学生有书 学生有手机
继承描述的是 什么是什么的关系 猪是动物 狗是动物
四、菱形继承
新式类与经典类
经典类:
新式类:
如果你的代码需要兼容py2 无论是直接还是间接继承,应该直接显示继承的是 object
多层菱形继承
使用super调用的所有属性,千万不能通过看代码去查找继承关系,要按照 mro列表 顺序查找继承,mro只能在Python3中使用,Python3中全是新式类
五、接口与抽象类
1、接口
Eg:USB
在程序中 功能通常是用函数来表示, 对于外界而言 无需清楚函数时如何实现的 只要知道函数名即可, 这个函数名称就可以称之为接口
外界调用接口就能完成某个任务
接口其实就是一组功能的定义,但是只清楚函数名称,而没有具体的实现细节
相当于是一套规范,
Eg:USB 规定了接口的外观,大小,以及每条线路的功能是什么,硬件开发商照着这个USB协议来生产设备,就可以被电脑使用
好处:使用接口可以提高程序的扩展性,只要对象按照接口规定方法来实现,使用者就可以无差别使用所有对象
2、抽象类
抽象:指的是 不清楚,不具体,看不懂
抽象方法:
问题:如果接口的子类没有实现接口中的方法,那是没有任何意义的
抽象类之所以出现的意义:通过抽象类来强行限制子类必须覆盖所有的抽象方法
六。鸭子类型
如果说一个对象叫声像鸭子,走路像鸭子,长得像鸭子,那它就是鸭子
鸭子类型是python 推荐的方式,python不喜欢强行限制你

浙公网安备 33010602011771号