线性查找python_C3-Linearization--线性化python
为什么采用C3算法
C3算法最早被提出是用于Lisp的,应用在Python中是为了解决原来基于深度优先搜索算法不满足本地优先级,和单调性的问题。
本地优先级:
指声明时父类的顺序,比如C(A,B),如果访问C类对象属性时,该根据声明顺序,优先查找A类,然后再查找B类。
单调性:
如果在C的解析顺序中,A排在B的前面,那么在C的所有子类里,也必须满足这个顺序。
线性化关系为:
L(7) = {'object'}
L(4) = {'4','7'}
L(5) = {'5','7'}
L(6) = {'6','7'}
L(2) = {'2','4','5','7','object'}
L(3) = {'3','4','6','7','object'}
L(1) = {'1','2','3','4','5','6','7','object'}
python 代码如下:
#! /usr/bin/env python
#
# multi inheritance view
# /------ 7-------\
# / | \
# 4 - 5 6
# \\ / /
# 2-/\--- 3------/
# \ /
# 0,1
#
#
class C7(object):
def test(self):
print 'test in C7'
class C4(C7):
def test(self):
print 'test in C4'
class C5(C7):
def test(self):
print 'test in C5'
class C6(C7):
def test(self):
print 'test in C6'
class C2(C4,C5):
def test(self):
print 'test in C2'
class C3(C4,C6):
pass
class C1(C2,C3):
pass
class C0(C2,C3):
def test(self):
print 'test in C0'
super(C3,self).test()
if __name__ == "__main__":
c1 = C1()
c1.test()
c0 = C0()
c0.test()
print C7.__mro__
print C6.__mro__
print C5.__mro__
print C4.__mro__
print C3.__mro__
print C2.__mro__
print C1.__mro__
print C0.__mro__
输出结果为:
test in C2
test in C0
test in C4
(, )
(, , )
(, , )
(, , )
(, , , , )
(, , , , )
(, , , , , , , )
(, , , , , , , )
更多可以查看 wiki
本文作者:Jack Yao
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
线性查找python_C3-Linearization--线性化python相关推荐
- python学习-综合练习七(二分查找(递归)、线性查找、插入排序、快速排序、选择排序、冒泡排序、归并排序、堆排序)-实例
文章目录 二分查找 线性查找 插入排序 快速排序 选择排序 冒泡排序 归并排序 堆排序 推荐代码一 推荐代码二 希尔排序 拓扑排序 说明:本篇博文的知识点大部分来自 Python3 实例 二分查找 二 ...
- Python的线性查找(作业)
线性查找指按一定的顺序检查数组中每一个元素,直到找到所要寻找的特定值为止. 定义Search(arr,n,x)函数实现在列表arr中查找x元素,如果存在输出元素在arr中的位置,否则输出-1.其中,n ...
- 算法与数据结构(python):线性查找与二分查找
提示:提示:专栏解锁后,可以查看该专栏所有文章. 文章目录 查找 线性查找 1普通线性查找 2递归线性查找 二分查找 1普通二分查找 2递归二分查找 查找 查找可以说是我们业务代码里用得最多的操作,比 ...
- python单词翻译-完成自动查找翻译单词的python源代码
下面这段代码需要完成的是关于完成自动查找翻译单词的python源代码,找到目标单词在网上词典完成翻译的过程. #!/usr/bin/python #coding=utf-8 import urllib ...
- 《剑指offer》——04. 二维数组中的查找——暴力法、线性查找——java实现
文章目录 1.题目描述 2.解决方法 (1)暴力法 (2)线性查找(右上角->左下角) 参考: 1.题目描述 2.解决方法 (1)暴力法 如果不考虑二维数组排好序的特点,则直接遍历整个二维数组的 ...
- 数据结构之线性查找和折半查找
1.线性查找 比如字符串 char s[] = "chenyu"; 如果我们是线性查找的话,就是从字符'c'依次到字符串结尾'u'查找 2.折半查找 注意查找之前必须是有序的 比如 ...
- C语言数组查找(线性查找 折半查找)
线性查找 #include <stdio.h> #include <math.h>void find_nine(int numbers[]) {int i;for(i = 0; ...
- 线性查找法java代码_Java线性查找和二分查找
Java线性查找和二分查找. 一 线性查找 定义:在一列给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程. 线性查找又称为顺序查找.如果查找池是某种类型的一个表,比如一个数组,简 ...
- C语言丨线性查找(顺序查找)
程序员在程序设计时常常需要对存储在数组中的大量数据进行处理,如排序.查找等.使用数据库时,用户可能需要频繁通过输入键字值来查找相应的记录.在数组中搜索一个特定元素的处理过程,称为查找.这次我们来介绍一 ...
- 1.2_linearbinary_search_顺序(线性)查找二分(折半)查找
--- 顺序查找 ---线性查找.从列表第一个元素开始,顺序进行搜索直到找到元素或搜索到列表最后一个元素为止--- 二分查找 ---折半查找.从有序列表的初始候选区 li[0:n] 开始通过对 待查找 ...
最新文章
- group by 分组后 返回的是一个同属性的集合
- qPCR实验疑难杂问解答
- php gd gif动画,我可以检测使用PHP和GD的animationGIF?
- JavaScript设计模式 Item 2 -- 接口的实现
- Ubuntu 安装 CLI 并运行 ASP.NET Core 1.0
- js时间戳写入mysql
- SpringBoot系列(8):SpringBoot中的MVC支持【组件型注解、请求和参数型注解】详解
- servlet原理+流程图+简单实现案例(javaweb)
- python制作圆形按钮_圆形按钮tkinter python
- 渗透测试学习笔记之案例一
- 基于OpenGL的Android系统视频转换功能实现
- IE和谷歌浏览器区分
- 浙教版数学作业本,参考答案如此下载
- 这根网线真奇怪——笔记本可用,台式机不可用(另一端重压水晶头后可以)
- 【擦哥擦姐的CSDN博客】原创系列博客清单整理【截至2022年9月30日】
- Sendmail大全
- 【box-shadow盒子内边阴影外阴影】
- 计算机网络实验二cdma编码,CDMA编码实验_长春理工大学
- 2022年东南大学计算机考研复试时间是什么时候
- 一文解决MySQL突击面试,关键知识点总结
热门文章
- Gmail 实验室产品经理 Todd Jackson 访谈录
- 跟踪(一):跟踪常见算法和特点
- elementary 安装常用软件
- 装mysql电脑网卡不见了_电脑本地连接不见了,教您怎么解决
- LLVM创始人Chris Lattner回顾展望编译器
- Socket套接字,一个简单的聊天室案例!
- “男朋友送了我一瓶才100多块的香水”
- 关于浏览器被hao123劫持
- Unity粒子系统学习笔记
- mysql中rpl_MySQL半同步复制之rpl_semi_sync_master_wait_point