鱼C论坛

 找回密码
 立即注册
查看: 1169|回复: 2

[已解决]38讲中课后题super()语句的例子

[复制链接]
发表于 2020-4-10 01:05:10 | 显示全部楼层
本帖最后由 Stubborn 于 2020-4-10 01:09 编辑

一个类的 [`__mro__`](https://docs.python.org/zh-cn/3. ... .html#class.__mro__) 属性的三个准则:

- 子类会先于父类被检查
- 多个父类会根据它们在列表中的顺序被检查
- 如果对下一个类存在两个合法的选择,选择第一个父类

这个属于第一个情况,如果没有同一个父类,那么Mro正常是先检查自身,而后从继承的父类或者兄弟类,从左到右检查,父类如果还存在继承,优先被检查。
但是B,C有同一个父类,所以,Mro的顺序是    D - B - C - A - Object
你可以尝试,去掉C的父类,看下Mro的搜索顺序。结合体验下


  1. class A: pass                                                                             
  2. class B: pass                                                                             
  3. class C(A, B): pass                                                                       
  4. print(C.mro())                                                                           
  5. # [<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]   
  6. class D:pass                                                                              
  7. class E(C, D):pass                                                                        
  8. print(E.mro())                                                                           
  9. # [<class '.E'>, <class '.C'>, <class '.A'>, <class '.B'>, <class '.D'>, <class 'object'>]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-30 04:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表