super之mro列表牵引出c3算法
2021/12/7 1:16:33
本文主要是介绍super之mro列表牵引出c3算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 一:super之mro列表牵引出c3算法
- 二:mro列表总结使用
一:super之mro列表牵引出c3算法
print(C.__mro__) 结果:(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>) class A: def test(self): print('from A.test') super().test() ————》到B--->object c3线性算法 class B: def test(self): print('from B') class C(A, B): pass c = C() c.test() 结果: from A.test from B 牵扯到mro列表 print(C.__mro__) 结果:(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>) 顺序 c3线性算法 为了实现继承,python会在mro列表从左往右开始查找基类,直到找到第一个匹配这个属性的类为止 而这个mro列表是通过一个c3线性算法来实现的,我们不去深究这个算法的数学原理,它实际上就是合并所以父类的mro列表并遵循如下三条 1.子类会先余父类被检查 2.多个父类会根据他们在列表的顺序被检查 3.如果对下一个类存在两个合法选择,选择第一个父类
二:mro列表总结使用
1.到我们碰倒super 难以分析 使用print(C.mro()) 打印查找顺序:[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>] 获取super的顺序流程
class B: def test(self): print('B---->test') def aaa(self): print('B---->aaa') class A: def test(self): print('A---->test') super().aaa() class C(A, B): def aaa(self): print('C----->aaa') c = C() c.test() 打印结果: 'A---->test B---->aaa print(C.mro()) 打印查找顺序:[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]
这篇关于super之mro列表牵引出c3算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-20whatsapp webhook 回调的签名验证偶尔会失败是什么原因-icode9专业技术文章分享
- 2024-09-19Excel数据导出课程:初学者必备教程
- 2024-09-19Excel数据导入课程:新手入门指南
- 2024-09-19RBAC的权限管理入门教程
- 2024-09-19如何使用Svg Sprite Icon制作图标
- 2024-09-19uniapp 如何实现点赞后全局更新数据-icode9专业技术文章分享
- 2024-09-19云函数怎么运行wx-server-sdk-icode9专业技术文章分享
- 2024-09-19"dependencies": { "wx-server-sdk": "latest" },是什么意思-icode9专业技术文章分享
- 2024-09-16优化批处理流程:自定义BatchProcessorUtils的设计与应用
- 2024-09-15laravel collect游标批量插入的方法示例-icode9专业技术文章分享