
继承
继承就是可以获取另外一个类中的成员属性和成员方法。(并非所有成员)
作用:继承的作用是增加代码的复用性,节省不必要的重复代码,提高开发效率,同时可以设置类之间的关系。
继承的两个概念:
父类 用于被继承的类,称之为父类,也叫做基类,或者超类
子类 继承其他类的类,称之为子类,也叫做派生类
继承的格式
class 父类: pass
class 子类(父类):#继承操作的关键步骤 pass
继承的特征
1.所有类都是继承自object类(object类对应的对象就是object对象,也是万物皆对象) 2.子类继承父类则可以访问父类的所有成员。(私有成员除外) 3.子类继承父类并不会将父类的所有成员复制到子类当中去,访问父类成员是间接通过父类来访问的, 4.子类可以具有自己独有的属性和方法 5.子类可以重载父类中的方法,只需要设置和父类指定成员相同的名称即可实现重载,重载之后的成员,子类只会访问当前类中的成员,而不会调用父类中同名的成员 6.子类中如果重载父类的方法,并且还想将重载的父类方法借调过来使用,可以在重载的方法中使用如下方法父类名.方法()或者super().方法()
单继承和多继承
单继承:每个类只能继承一个类的方式称为单继承。
多继承:每个类可以同时继承多个类的方式称为多继承。
python属于多继承语言!但是一般不用
多继承格式:
class 父类1:
pass
class 父类2:
pass
class 子类(父类1,父类2):
pass
多继承之后,子类就具备了所有父类的成员(私有成员除外)
多个父类具有相同的成员时,子类继承[继承列表]中第一个类的方法
菱形继承/钻石继承
菱形继承格式
class A:
pass
class B(A):
pass
class C(A):
pass
class D(B,C):
pass
A
/ \
B C
\ /
D
菱形继承存在的问题
如果BC类同时继承了A类,D类又继承了BC两个类的情况下(菱形继承), 在调用BC中某个同名方法(该方法都继承自A类)时会导致继承自A类的该方法被多次调用。产生逻辑问题! 所以python使用 super() 类来解决了多继承的菱形继承问题
MRO列表
Method Realtion Order 用来制作一个继承关系的列表
python3中使用C3算法来计算MRO列表(计算过程暂时忽略)
MRO列表的制作原则:
1.子类永远在父类的前面
2.如果继承了多个父类,那么按照()中的顺序在列表中摆放
super()
super不是一个关键字,也不是一个函数,他是一个类
super()的作用不是查找父类,而是找MRO列表的上一个类
super()和父类没有任何实质性的关系,只是有时候能调用到父类而已。
在单继承的情况下,super()永远调用的是父类/父对象
格式:
super().方法() #python3的格式
多继承按需操作,在没有必要的时候避免强行使用!


本文详细解析了Python中的继承概念,包括单继承、多继承、菱形继承及其解决方法,探讨了super()函数的正确使用,以及MRO列表的生成原则。
1805

被折叠的 条评论
为什么被折叠?



