1、什么是继承
继承是一种新建类的方式,新建的类称之为子类,被继承的类称之为基类、父类、超类
继承描述的是一种“遗传”的关系:子类可以重用父类的属性
在python中的继承注意两点:
1. 在python中支持一个子类同时继承多个父类,
2. python中类分为两种:
新式类:但凡继承object的类,以及该类的子类。。。都是新式类
在python3中一个类如果没有继承人类类,默认继承object类,即python3中所有的类都是新式类
经典类: 没有继承object的类,以及该类的子类。。。都是经典类
在python2中才区分新式类与经典类
2、为何要用继承
1. 减少代码冗余
继承解决的是类与类之间的代码冗余问题,一定是一个类是另外一个类的子类
继承关系的查找
总结对象之间的相似之处得到类,总结类与类之间的相似之处就得到了类们的父类
在子类派生出的新方法中重用父类功能
方式一:
指名道姓地访问某一个类的函数
注意:
1. 该方式与继承是没有关系的
2. 访问是某一个类的函数,没有自动传值的效果
方式二:只能在子类中用
在python2:super(自己的类名,对象自己)
在python3:super()
调用super()会得到一个特殊的对象,该特殊的对象是专门用来引用父类中的属性的,!!!完全参照mro列表!!!
注意:
1. 该方式与继承严格依赖于继承的mro列表
2. 访问是绑定方法,有自动传值的效果
单继承背景下属性查找的顺序:对象-》对象的类-》父类-》...
多继承背景下属性查找的顺序:对象-》对象的类-》按照从左往右的顺序一个一个的分支找下去
一旦出现菱形继承问题,新式类与经典类在属性查找上的区别是
新式类:广度优先查找,在最后一个分支查找顶级类
经典类:深度优先查找,在第一个分支就查找顶级类
在新式类中,提供了一个mro方法