Python中的多继承

Python012

Python中的多继承,第1张

单继承:一个派生类的基类只有一个

多继承:一个派生类的基类有多个

一句话区分就是:单继承是一个生一个,多继承是多个生一个

多继承的基本语法:

子类定义构造方法时,需要将父类的构造方法调用一次。

案例演示:

在多继承中,所有基类的方法可以直接继承,但是属性需要手工初始化。如果派生类中没有 __init__ 方法,则默认获得第一个类的属性。如果派生类中有 __init__ 方法,则所有基类的属性都不会获得,需要手动逐一初始化。

我们定义一个ChineseStudent类,其继承关系如下:

调用基类的属性和方法

在不同的基类中存在相同的方法,派生类对象调用方法时会调用哪个父类的方法呢?

默认情况下,如果多个基类中有相同的方法,越在前面,优先级越高。

为了避免后期没必要的错误,建议基类之间存在重名的属性和方法应该尽量避免。

MRO(Method Resolution Order)方法解析顺序

如果是经典类(旧式类),MRO的方法--DFS(深度优先搜索)策略

如果是新式类,MRO的方法--BFS(广度优先搜索)策略

特征:私有属性与私有方法不能从外部被调用,也不能被子类继承

唯一写法:在属性或方法前面加上__(两个下划线)

我们写一个简单的例子,创建一个类,包含私有方法、私有属性、普通方法、普通属性,并生成一个实例

私有属性和私有方法可以从内部被调用(总不能我写了,但是哪都不让用吧)

我们试试在类里再加入一个新的方法,调用私有方法和属性

可以看到,私有属性和私有方法是可以在类内部被调用的。

举个私有属性应用场景的例子

二。object类

我们试一下

三。多继承

一个子类可以继承多个父类,用逗号隔开

多个父类中有同名方法时,按照继承顺序进行调用

四。多态

当不同的实例,有同名的方法时,我们可以一个函数,传入不同的实例,执行对应的方法。

我们定义一个猫和一个狗的类,两个类中都有'叫'的方法。并各生成一个实例。

定义一个函数,用函数来调用'叫'的方法

这就叫多态。