码迷,mamicode.com
首页 > 其他好文 > 详细

初始继承之顺序/深度优先及广度优先

时间:2019-07-05 00:37:58      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:两种   括号   一个   类的继承   不用   二层   变量   种类   父类   


面向对象的三大特性:继承,多态,封装
初识别继承:
                 作为继承者的类的定义时,在这个类名的括号内加入被继承的类的名字,被继承的类被称为父类或基类,继承者被称为子类

                 使用子类类名及其实例化产生的对象,可以访问父亲的任何方法或变量

执行的顺序是先找对象,再找类,再找父类.也就是说:

如果想只执行父类的方法,则子类中不要定义父类同名的方法
如果想只执行子类的方法,在子类中单独创建这个方法即可
既要执行父类的方法又要子类的话:
1.

如果两个父子都有init,先且只执行子类的)在子类的init里,使用类名调用父类的init,被调用的父类的init形参需要加到子类的init定义里
子类的就完成了形参变实参的过程,子类中的self在实例化时自动变成对象(名),调用父类就是普通的执行函数。是一个嵌套函数的过程。
2.
super().i方法名(参数,除self)
效果一样,且工作中只用后者,括号内可省略,一般不用1.这种类名.方法。

真正的继承:分为单继承和多继承。
类:经典类和新式类
凡是继承object的类都是新式类,python3里的都是新式类
不继承object的是经典类,只存在于python2,2.x中默认都不继承object.

对于继承的顺序而言:

单继承,两种类的查询顺序一样,一层一层往上找
多继承,新式类:遵循广度优先;经典类:深度优先。
广度优先:每个节点,走且只走一次。在一条路进行到倒数第二层时,如果最终的基类别的路能达到,就换;不能就走完这个类。一条路走到倒数第二级开始判断,如果其他路可以走到终点就切换到那条,不然就继续走。

在工作中,使用类名.mro()查询类的继承顺序即可。上述内容是面试题需要.

深度优先:一条路走到黑,就走就行.

初始继承之顺序/深度优先及广度优先

标签:两种   括号   一个   类的继承   不用   二层   变量   种类   父类   

原文地址:https://www.cnblogs.com/shachengcc1/p/11135554.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!