初始继承之顺序/深度优先及广度优先
Posted shachengcc1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初始继承之顺序/深度优先及广度优先相关的知识,希望对你有一定的参考价值。
面向对象的三大特性:继承,多态,封装
初识别继承:
作为继承者的类的定义时,在这个类名的括号内加入被继承的类的名字,被继承的类被称为父类或基类,继承者被称为子类
使用子类类名及其实例化产生的对象,可以访问父亲的任何方法或变量
执行的顺序是先找对象,再找类,再找父类.也就是说:
如果想只执行父类的方法,则子类中不要定义父类同名的方法
如果想只执行子类的方法,在子类中单独创建这个方法即可
既要执行父类的方法又要子类的话:
1.
如果两个父子都有init,先且只执行子类的)在子类的init里,使用类名调用父类的init,被调用的父类的init形参需要加到子类的init定义里
子类的就完成了形参变实参的过程,子类中的self在实例化时自动变成对象(名),调用父类就是普通的执行函数。是一个嵌套函数的过程。
2.
super().i方法名(参数,除self)
效果一样,且工作中只用后者,括号内可省略,一般不用1.这种类名.方法。
真正的继承:分为单继承和多继承。
类:经典类和新式类
凡是继承object的类都是新式类,python3里的都是新式类
不继承object的是经典类,只存在于python2,2.x中默认都不继承object.
对于继承的顺序而言:
单继承,两种类的查询顺序一样,一层一层往上找
多继承,新式类:遵循广度优先;经典类:深度优先。
广度优先:每个节点,走且只走一次。在一条路进行到倒数第二层时,如果最终的基类别的路能达到,就换;不能就走完这个类。一条路走到倒数第二级开始判断,如果其他路可以走到终点就切换到那条,不然就继续走。
在工作中,使用类名.mro()查询类的继承顺序即可。上述内容是面试题需要.
深度优先:一条路走到黑,就走就行.
以上是关于初始继承之顺序/深度优先及广度优先的主要内容,如果未能解决你的问题,请参考以下文章