面向对象-单继承、多继承、菱形继承
单继承与多继承 单继承: 一个类只能继承一个父类的方式。 多继承 :一个类可以继承多个父类的方式。 单继承: (生物角度) 人类->哺乳类动物->动物->生物->有机物.... 多继承: (社会角度) 舞蹈老师(教舞蹈) 体育老师(运动) 爸爸(抽烟) 妈妈(打扫卫生) 我(舞蹈,运动,抽烟,打扫卫生) 单继承案例: 父类: pass 子类(父类): pass 多继承案例: 父类1: pass 父类2: pass 父类3: pass 子类(父类1,父类2,父类3): pass 多继承的问题所在:菱形继承或者钻石继承中的问题 。 菱形继承的bug解决: MRO列表和super 类 当我们定义一个菱形继承关系的时候,程序会自动生成一个新的MRO列表。 MRO列表: Method Realtion Order 方法关系列表。 MRO列表的生成采用了C3算法完成的。 C3算法的原则: 1.子类永远在父类的前面2.同一等级的类,按照子类中的继承顺序摆放 super()调用的时候,不是查找父类!!!! 实际上super是查找MRO列表的上一个类 super()调用对象方法的时候不需要传入对象,自动传入 补充: 如果需要查看mro列表,可以使用对象.mro() 方法查看(非必要~) 1.单继承案例 1 # 单继承案例 2 ''' 3 爷爷类 4 爸爸类 5 儿子类 6 ''' 7 8 # 爷爷类