为什么采用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相关推荐

  1. python学习-综合练习七(二分查找(递归)、线性查找、插入排序、快速排序、选择排序、冒泡排序、归并排序、堆排序)-实例

    文章目录 二分查找 线性查找 插入排序 快速排序 选择排序 冒泡排序 归并排序 堆排序 推荐代码一 推荐代码二 希尔排序 拓扑排序 说明:本篇博文的知识点大部分来自 Python3 实例 二分查找 二 ...

  2. Python的线性查找(作业)

    线性查找指按一定的顺序检查数组中每一个元素,直到找到所要寻找的特定值为止. 定义Search(arr,n,x)函数实现在列表arr中查找x元素,如果存在输出元素在arr中的位置,否则输出-1.其中,n ...

  3. 算法与数据结构(python):线性查找与二分查找

    提示:提示:专栏解锁后,可以查看该专栏所有文章. 文章目录 查找 线性查找 1普通线性查找 2递归线性查找 二分查找 1普通二分查找 2递归二分查找 查找 查找可以说是我们业务代码里用得最多的操作,比 ...

  4. python单词翻译-完成自动查找翻译单词的python源代码

    下面这段代码需要完成的是关于完成自动查找翻译单词的python源代码,找到目标单词在网上词典完成翻译的过程. #!/usr/bin/python #coding=utf-8 import urllib ...

  5. 《剑指offer》——04. 二维数组中的查找——暴力法、线性查找——java实现

    文章目录 1.题目描述 2.解决方法 (1)暴力法 (2)线性查找(右上角->左下角) 参考: 1.题目描述 2.解决方法 (1)暴力法 如果不考虑二维数组排好序的特点,则直接遍历整个二维数组的 ...

  6. 数据结构之线性查找和折半查找

    1.线性查找 比如字符串 char s[] = "chenyu"; 如果我们是线性查找的话,就是从字符'c'依次到字符串结尾'u'查找 2.折半查找 注意查找之前必须是有序的 比如 ...

  7. C语言数组查找(线性查找 折半查找)

    线性查找 #include <stdio.h> #include <math.h>void find_nine(int numbers[]) {int i;for(i = 0; ...

  8. 线性查找法java代码_Java线性查找和二分查找

    Java线性查找和二分查找. 一 线性查找 定义:在一列给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程. 线性查找又称为顺序查找.如果查找池是某种类型的一个表,比如一个数组,简 ...

  9. C语言丨线性查找(顺序查找)

    程序员在程序设计时常常需要对存储在数组中的大量数据进行处理,如排序.查找等.使用数据库时,用户可能需要频繁通过输入键字值来查找相应的记录.在数组中搜索一个特定元素的处理过程,称为查找.这次我们来介绍一 ...

  10. 1.2_linearbinary_search_顺序(线性)查找二分(折半)查找

    --- 顺序查找 ---线性查找.从列表第一个元素开始,顺序进行搜索直到找到元素或搜索到列表最后一个元素为止--- 二分查找 ---折半查找.从有序列表的初始候选区 li[0:n] 开始通过对 待查找 ...

最新文章

  1. group by 分组后 返回的是一个同属性的集合
  2. qPCR实验疑难杂问解答
  3. php gd gif动画,我可以检测使用PHP和GD的animationGIF?
  4. JavaScript设计模式 Item 2 -- 接口的实现
  5. Ubuntu 安装 CLI 并运行 ASP.NET Core 1.0
  6. js时间戳写入mysql
  7. SpringBoot系列(8):SpringBoot中的MVC支持【组件型注解、请求和参数型注解】详解
  8. servlet原理+流程图+简单实现案例(javaweb)
  9. python制作圆形按钮_圆形按钮tkinter python
  10. 渗透测试学习笔记之案例一
  11. 基于OpenGL的Android系统视频转换功能实现
  12. IE和谷歌浏览器区分
  13. 浙教版数学作业本,参考答案如此下载
  14. 这根网线真奇怪——笔记本可用,台式机不可用(另一端重压水晶头后可以)
  15. 【擦哥擦姐的CSDN博客】原创系列博客清单整理【截至2022年9月30日】
  16. Sendmail大全
  17. 【box-shadow盒子内边阴影外阴影】
  18. 计算机网络实验二cdma编码,CDMA编码实验_长春理工大学
  19. 2022年东南大学计算机考研复试时间是什么时候
  20. 一文解决MySQL突击面试,关键知识点总结

热门文章

  1. Gmail 实验室产品经理 Todd Jackson 访谈录
  2. 跟踪(一):跟踪常见算法和特点
  3. elementary 安装常用软件
  4. 装mysql电脑网卡不见了_电脑本地连接不见了,教您怎么解决
  5. LLVM创始人Chris Lattner回顾展望编译器
  6. Socket套接字,一个简单的聊天室案例!
  7. “男朋友送了我一瓶才100多块的香水”
  8. 关于浏览器被hao123劫持
  9. Unity粒子系统学习笔记
  10. mysql中rpl_MySQL半同步复制之rpl_semi_sync_master_wait_point