python mro算法_Python -- mro算法
经典类:
class A:
pass
class B(A):
pass
class C(A):
pass
class D(B, C):
pass
class E:
pass
class F(D, E):
pass
class G(F, D):
pass
class H:
pass
class Foo(H, G):
pass
代码示例
经典类中mro算法依靠深度优先原则:
类的mro:Foo-> H -> G -> F -> E -> D -> B -> A -> C
新式类
MRO是一个有序列表L,在类被创建时就计算出来.
通用计算公式为:
mro(Child(Base1,Base2)) = [Child] + merge(mro(Base1) , mro(Base) , [Base1,Base2])
#(其中Child继承自Base1, Base2)
表头和表尾
表头:列表的第一个元素
表尾:列表中表头以外的元素集合(可以为空)
列表之间的+操作
[A] + [B] = [A,B]
merge操作示例:
如计算merge( [E,O], [C,E,F,O], [C] )
有三个列表 : ① ② ③
merge不为空,取出第一个列表列表①的表头E,进行判断
各个列表的表尾分别是[O], [E,F,O],E在这些表尾的集合中,因而跳过当前当前列表
取出列表②的表头C,进行判断
C不在各个列表的集合中,因而将C拿出到merge外,并从所有表头删除
merge( [E,O], [C,E,F,O], [C]) = [C] + merge( [E,O], [E,F,O] )
进行下一次新的merge操作 ......
---------------------
mro(A) = mro( A(B,C) )
原式= [A] + merge( mro(B),mro(C),[B,C] )
mro(B) = mro( B(D,E) )
= [B] + merge( mro(D), mro(E), [D,E] ) # 多继承
= [B] + merge( [D,O] , [E,O] , [D,E] ) # 单继承mro(D(O))=[D,O]
= [B,D] + merge( [O] , [E,O] , [E] ) # 拿出并删除D
= [B,D,E] + merge([O] , [O])
= [B,D,E,O]
mro(C) = mro( C(E,F) )
= [C] + merge( mro(E), mro(F), [E,F] )
= [C] + merge( [E,O] , [F,O] , [E,F] )
= [C,E] + merge( [O] , [F,O] , [F] ) # 跳过O,拿出并删除
= [C,E,F] + merge([O] , [O])
= [C,E,F,O]
原式= [A] + merge( [B,D,E,O], [C,E,F,O], [B,C])
= [A,B] + merge( [D,E,O], [C,E,F,O], [C])
= [A,B,D] + merge( [E,O], [C,E,F,O], [C]) # 跳过E
= [A,B,D,C] + merge([E,O], [E,F,O])
= [A,B,D,C,E] + merge([O], [F,O]) # 跳过O
= [A,B,D,C,E,F] + merge([O], [O])
= [A,B,D,C,E,F,O]
---------------------
python mro算法_Python -- mro算法相关推荐
- python mro文件_Python MRO
文中代码基于Python3.7 对于Python中的多继承情况,运行时在搜索对象的属性或方法时,需要遵循一定的顺序规则,这个规则称为:Method Resolution Order (MRO). MR ...
- python归并算法_python归并算法
python数据结构与算法总结 python常用的数据结构与算法就分享到此处,本月涉及数据结构与算法的内容有如下文章: <数据结构和算法对python意味着什么?> <顺序表数据结构 ...
- python常用代码_Python常用算法学习(4) 数据结构(原理+代码)-最全总结
数据结构简介 1,数据结构 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成.简单来说,数据结构就是设计数据以何种方式组织并存贮在计算机中.比如:列表,集合与字 ...
- python常用代码_Python常用算法学习(3)(原理+代码)——最全总结
1,什么是算法的时间和空间复杂度 算法(Algorithm)是指用来操作数据,解决程序问题的一组方法,对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但是在过程中消耗的资源和时间却会有很大 ...
- python 归并排序算法_python基本算法之实现归并排序(Merge sort)
0.前言 评判一个算法的好坏的标准: 时间复杂度 空间复杂度 1.归并排序算法是什么? 冒泡排序(Bubble Sort)是一种建立在归并操作上面的一种有效的排序算法,由John von neuman ...
- python预测发展趋势_Python预测算法哪家强?权游龙妈是生还是凉凉?
这个世界上只有两种人,看「权游」(权利的游戏)的,和不看「权游」的. 你们心心念的权游终于迎来了最终季,狼家史塔克的家训「Winter is coming」终终终终终于是应验了,人类与异鬼的战争一触即 ...
- python人脸识别算法_python人脸算法
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 若图片中包含多张人脸,只选取其中人脸面积最大的人脸. 支持png.jpg.jpe ...
- python中加减乘除_Python基础算法综合:加减乘除四则运算方法
#!usr/bin/env python # -*- coding:utf-8 -*- #python的算法加减乘除用符号:+,-,*,/来表示 #以下全是python2.x写法,3.x以上请在pyt ...
- 双色球python十种算法_python : 蒙特卡罗算法 应用于双色球
参考书:算法设计与分析 王晓东 编著 :第7章 概率算法 7.5 蒙特卡罗算法 http://www.gdfc.org.cn/datas/history/twocolorball/history_1. ...
- python 最短路径算法_python Dijkstra算法实现最短路径问题的方法
本文借鉴于张广河教授主编的<数据结构>,对其中的代码进行了完善. 从某源点到其余各顶点的最短路径 Dijkstra算法可用于求解图中某源点到其余各顶点的最短路径.假设G={V,{E}}是含 ...
最新文章
- ToolPart的简单开发
- Leetcode 622. 设计循环队列 解题思路及C++实现
- 在reader中勾选pdf复选框_绝对可勾选的在WORD 2003中加入复选框的方法
- OpenGL framebuffer 帧缓冲区的实例
- java int数组写入文件中_Java程序将int数组写入文件
- StringUtils.isBlank()检验String 类型的变量是否为空
- c++11编码规范 NULL还是nullptr
- [剑指offer]面试题第[37]题[Leedcode][JAVA][第297题][二叉树列的序列化与反序列化][递归][BFS]
- 六自由度机器人逆向运动学_【课程笔记】Notes for Robotics/机器人学 (Part1)
- RTSP播放器或RTMP播放器常用的事件回调设计
- 用MATLAB玩转机器人--第六章 用MATLAB玩转单关节机器人
- Tomcate服务器的基本知识概括总结及安装目录概括
- VTK7.0.0编译安装心得
- postman怎么传对象list_postman 传递json的参数里面带了List对象
- ImageMagick的下载和配置
- 地老天荒只是一个华丽的传说
- 阿里巴巴sentinel限流
- 伍迷随想冷饭集 之 北国冬天之随想
- 基于STM32的倾斜仪设计(二)—— 硬件设计(2)
- 网络协议丨FTP协议和P2P协议
热门文章
- html+支付宝+全套页面,【支付源码】全新免签支付系统 仿码支付系统支持 微信 支付宝 QQ 全开源LPays全套源码...
- java为什么是静态的_为什么此方法必须是静态的(Java)?
- zoj题目分类详细的
- 革新OCR结构化技术应用,揭秘百度中英文OCR结构化模型StrucTexT预训练模型
- 源码下载地址及各类资源站点
- 296 最佳的碰头地点
- 区块链开发团队,公链开发才是主战场
- 【每日一题】 480. 滑动窗口中位数
- 杭州电子科技大学计算机复试内容,2018年杭州电子科技大学考研复试录取办法...
- 【Algorithm】数学归纳法