一、何为继承?
继承是一种创建新类的方式,新建的类可以继承一个或者多个父类。父类也可以叫做基类或者超类,新建的类称为派生类或者子类。
子类会遗传父类的属性,所谓继承就是为了解决代码重用问题(解决了代码冗余问题)
class ParentClass1:#定义父类
pass
class ParentClass1:定义父类
pass
class SubClass1:(ParentClass1):#单继承,父类为ParentClass1,子类是SubClass1
pass
class SubClass1:(ParentClass1,ParentClass2):#多继承,逗号分隔开多个继承的类
pass
查看继承:
SubClass1.__bases__ #__base__只查看从左到右继承的第一个子类,__bases__则是查看所有继承的父类
(<class '__main__.ParentClass1'>,)
SubClass2.__bases__
(<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>)
二、经典类和新式类
1.只有在python2中才分新式类和经典类,python3中统一都是新式类
2.在python2中,没有显示的继承object类的类,以及该类的子类,都是经典类
3.在python2中,显示地声明继承object的类,以及该类的子类,都是新式类
4.在python3中,无论是否显示继承object,都默认继承object,即python3中所有类均为新式类
提示:如果没有指定基类,python的类会默认继承object类,object是所有python类的基类,它提供了一些常见方法(如__str__)的实现
三、继承与抽象(先抽象再继承)
继承描述的是子类与父类之间的关系,如果要描述这层关系,就必须先继承再抽象。
抽象就是抽取类似或者比较像的部分
抽象最主要的作用就是划分类别,这一点可以 隔离关注点,降低复杂度
继承:继承是基于抽象的结果。(没有抽象就没有继承),我们通过抽象可以得到类
如果继承关系时菱形结构时,那么属性的查找方式为两种,分别是深度优先和广度优先
当类是经典类时,多继承情况下,在要查找属性不存在时,会按照深度优先去查找
当类是新式类时,多继承情况下,在要查找的属性不存在时,会按照广度优先去查找