多继承:一个派生类的基类有多个
一句话区分就是:单继承是一个生一个,多继承是多个生一个
多继承的基本语法:
子类定义构造方法时,需要将父类的构造方法调用一次。
案例演示:
在多继承中,所有基类的方法可以直接继承,但是属性需要手工初始化。如果派生类中没有 __init__ 方法,则默认获得第一个类的属性。如果派生类中有 __init__ 方法,则所有基类的属性都不会获得,需要手动逐一初始化。
我们定义一个ChineseStudent类,其继承关系如下:
调用基类的属性和方法
在不同的基类中存在相同的方法,派生类对象调用方法时会调用哪个父类的方法呢?
默认情况下,如果多个基类中有相同的方法,越在前面,优先级越高。
为了避免后期没必要的错误,建议基类之间存在重名的属性和方法应该尽量避免。
MRO(Method Resolution Order)方法解析顺序
如果是经典类(旧式类),MRO的方法--DFS(深度优先搜索)策略
如果是新式类,MRO的方法--BFS(广度优先搜索)策略
特征:私有属性与私有方法不能从外部被调用,也不能被子类继承
唯一写法:在属性或方法前面加上__(两个下划线)
我们写一个简单的例子,创建一个类,包含私有方法、私有属性、普通方法、普通属性,并生成一个实例
私有属性和私有方法可以从内部被调用(总不能我写了,但是哪都不让用吧)
我们试试在类里再加入一个新的方法,调用私有方法和属性
可以看到,私有属性和私有方法是可以在类内部被调用的。
举个私有属性应用场景的例子
二。object类
我们试一下
三。多继承
一个子类可以继承多个父类,用逗号隔开
多个父类中有同名方法时,按照继承顺序进行调用
四。多态
当不同的实例,有同名的方法时,我们可以一个函数,传入不同的实例,执行对应的方法。
我们定义一个猫和一个狗的类,两个类中都有'叫'的方法。并各生成一个实例。
定义一个函数,用函数来调用'叫'的方法
这就叫多态。