经典类

1.什么是经典类

就是在使用class关键词时,括号内不添加object类的就叫经典类,前面的博文里是绝对解析过的,所以你应该知道,经典类现在已经仅存在于python2了,因为python3不管你给没给object都会自动继承object类,其采用MRO算法深度优先搜索。Python 2.x中默认都是经典类,只有显式继承了object才是新式类

例:

像这种,如果不给object生成的类只有自己的属性方法,加上一个文档属性__doct__,一个模块方法__module__

2.特性:深度优先

什么叫深度优先,当多重继承时,会按照父类线路优先继承,如果父类不存在,再最后按照其他线路继承,什么意思呢?看个例子吧

C类同时继承了A和B,但是name属性的结果却是A的name属性,那如果C也有name属性呢?

自然,这个是没什么问题的吧?子类继承父类时,如果子类与父类有相同属性,子类的属性会覆盖父类的属性,这个大家都知道吧?

那如果再多一个父类继承呢?

什么情况?分析一下,C类同时继承了A和B,A又继承与P,C的name属性却是P类的name属性值,像这种就是深度优先,这就是经典类的特性,画个图解释下:

C类因为同时继承了A和B,所以就有两条线路走,C—>A—>P和C—>B,但是优先级更高的是以纵向继承的前者,所以会继承P的name属性

不过还要注意一个情况

它还是优先纵向继承

新式类

1.什么是新式类

就是在使用class关键词创建类时,给定了继承object基类的就叫新式类。其采用C3算法广度优先搜索。Python 3.x中默认都是新式类,经典类被移除,不必显式的继承object。新式类对象可以直接通过__class__属性获取自身类型:type。例:

和前面经典类做对比,很明显的,继承类object类的属性和方法都很多

2.特性:广度优先

什么叫广度优先,当多重继承时,会尽量避免深度继承,深度能浅一点就浅一点,如果实在无法解决,再最后按照父类的深度来继承,什么意思呢?看个例子吧

这么看好像和经典类的继承方式是一样的对吧?不急再加一层父类看看:

不多说,图解:

它的线路是C—>A—>B—>P和C—>A—>P和C—>B—>P,优先级最高的是前者,先横向查找,实在没有再纵向。

同样的,要注意一个情况:

当B类不继承P时,并且和P类都继承object时,在相同属性下不再遵守广度优先规则,而是一路纵向,得到的还是P类的name属性。这个情况很特殊,记住了。

最新文章

  1. 用swing也可以做出好看的界面
  2. Android中的HTTP通信
  3. Android的学习第六章(布局一LinearLayout)
  4. 游戏对象消失三种方法的区别?(enabled/Destroy/active)
  5. java.lang.classnotfoundexception org.json.jsonexception
  6. Velocity 基本语法
  7. tcpproxy:基于 Swoole 实现的 TCP 数据包转发工具的方法
  8. iOS的影片播放 MediaPlayer 和 AVPlayer(转)
  9. js购物时的放大镜效果
  10. 【CF】223 Div.1 C Sereja and Brackets
  11. noip2014 考试总结
  12. 【原】fetch跨域请求附带cookie(credentials)
  13. 使用kettle来根据时间戳或者批次号来批量导入数据,达到增量的效果。
  14. BZOJ2434 [NOI2011] 阿狸的打字机 【树链剖分】【线段树】【fail树】【AC自动机】
  15. Internet Download Manager IDM 破解器
  16. 如何让html中的td文字只显示部分
  17. Java排序算法之选择排序
  18. Go并发控制--context的使用
  19. WPF通过EventTrigger改变其他控件的值
  20. Android-Android/APP-理解

热门文章

  1. mongodb远程备份
  2. Python模拟微博登陆,亲测有效
  3. VSCode配置Git随记
  4. 关于vue项目中,手动定义的scrollTop的值
  5. CSS--最最最基础操作
  6. 【Promise】Promise实现请求超时处理(加强版)
  7. SQL 必知必会·笔记<7>汇总数据——使用聚合函数
  8. 获取访问者的IP地址
  9. FLV 封装格式解析
  10. 【学习笔记】JS设计模式总结