探索super()的执行顺序和__mro__方法
2024-10-07 04:41:38
class Base(object): def func(self):
print('Base.func') class Foo(Base): def func(self):
# 方式一:根据mro的顺序执行方法
# super(Foo,self).func()
# 方式二:主动执行Base类的方法
# Base.func(self) print('Foo.func') obj = Foo()
obj.func()
上述代码单继承,子类中没有func方法会去父类中找。
class Base(object): def func(self):
super(Base, self).func()
print('Base.func') class Bar(object):
def func(self):
print('Bar.func') class Foo(Base,Bar):
pass # 示例一
# obj = Foo()
# obj.func()
# print(Foo.__mro__) # 示例二
# obj = Base()
# obj.func()
上述代码,示例一Foo中没有func方法,super()会按照继承顺序,先去Base中找,Base中没有再去Bar中找,所以执行结果为所以super是按照
__mro__继承顺序执行的。
Foo.__mro__的结果为:
如果是示例二,则会报错,应为他的父类中没有相关方法。
最新文章
- MySQL慢查询日志总结
- [1]IP地址查询
- SSH项目(struts+spring+hibernate)搭建_代码简化
- nios II--实验6——串口软件部分
- stm32中断优先级
- JavaScript基础知识(一)
- IOS学习5——属性与成员变量
- Python机器学习:5.6 使用核PCA进行非线性映射
- 选项卡js版封装
- CSS Sprites(基本写法,怎样使用)
- BZOJ2406矩阵——有上下界的可行流+二分答案
- Python自学:第三章 倒着打印列表
- 201621123075 week5 继承、多态、抽象类和接口
- PHP7 学习笔记(九)phpsize动态编译openssl扩展 (微信公众平台)
- Git同时使用不同平台代码仓库
- 分布式计算(一)Ubuntu搭建Hadoop分布式集群
- FastDFS部署安装全过程
- Visual GC(监控垃圾回收器)
- 记录下返回list给前端 遇到 $ref";:";$.data.*** 问题
- Linux下的终端快捷键
热门文章
- golang context学习记录2
- 【flask】环境配置-python-dotenv的使用
- KVM + LinuxBridge 的网络虚拟化解决方案实践
- delphi TDbGrid 右键 PopupMenu 菜单只在有数据的地方弹出
- 【ABAP系列】SAP ABAP7.40新语法简介第一篇
- session 的理解
- HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码
- 浅谈React工作原理
- Java集合简单解析
- [BJWC2008] Gate Of Babylon