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-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享