python继承属性_python继承,属性查找顺序
以为python支持多继承,因此在复杂的继承关系下很容易弄错属性的查找顺序,今天特意学习了下
python3用的是c3线性化算法,听名字很高大上,公式我也看了,看不懂,但是这不影响理解查找的顺序
先看下面一张图片:
乍一看好晕
Python类继承父类,在当前类中都是从左往右查找
把顶层O看成第一层,第一层没什么好看的,就一个O类
看第二层C A B D E,可以用如下表达式表示:
L(C) = [C,O] L(A) = [A,O] L(B) = [B,O] L(D) = [D,O] L(E) = [E,O]
第三层:首先看K1,K1继承了C A B
L(K1) = [K1] + merge(L(C),L(A),L(B),(C,A,B)) # 后面的CAB表示继承自CAB
L(K1) = [K1] + merge([C,O],[A,O],[B,O],(C,A,B)) # 首先看这一行表达式,我们先取出L(C)中的第一个元素C,发现L(A),L(B)的尾部(尾部指除第一个元素外后面的元素都是尾部)都没有C这个元素,因此把它取出来放到前面的这个K1列表中
L(K1) = [K1,C] + merge([O],[A,O],[B,O],(C,A,B)) # 然后把L(C)中的C元素删除
L(K1) = [K1,C] + merge([O],[A,O],[B,O],(A,B)) # 然后在对比O元素,发现后面都有,因此看第二个L(A)列表取出第一个A元素,进行对比,发现L(C),L(B)中都没有
L(K1) = [K1,C,A] + merge([O],[O],[B,O],(B)) # 以此类推
L(K1) = [K1,C,A,B] + merge([O],[O],[O])
L(K1) = [K1,C,A,B,O] # 这就是K1类的查找顺序了
L(K3) = [K3,A,D,O]
L(K2) = [K2,B,D,E,O]
L(Z) = [Z] + merge(L(K1),L(K1),L(K1),(K1,K3,K2))
L(Z) = [Z] + merge[K1,C,A,B,O],[K3,A,D,O],[K2,B,D,E,O],(K1,K3,K2)) # 先取K1,发现后面列表尾部并没有,尾部指除第一个元素外后面的元素都是尾部
L(Z) = [Z,K1] + merge[C,A,B,O],[K3,A,D,O],[K2,B,D,E,O],(K3,K2)) # 还是从第一个列表开始,取C进行比较,得下面表达式
L(Z) = [Z,K1,C] + merge([A,B,O],[K3,A,D,O],[K2,B,D,E,O],(K3,K2)) # 取A发现 第二类表尾部有,这时看第二个列表的K3,以此类推
L(Z) = [Z,K1,C,K3,A,K2,B,D,E,O]
这就是C3算法,今天有点晚了,明天粘上代码
python继承属性_python继承,属性查找顺序相关推荐
- python类属性和实例属性_Python 类属性与实例属性,类对象与实例对象用法分析...
本文实例讲述了Python 类属性与实例属性,类对象与实例对象用法.分享给大家供大家参考,具体如下: demo.py(类属性,所有实例对象共用类属性): # 定义工具类 继承object是为了兼容py ...
- python对象的三个属性_Python 对象属性的访问
在 Python 中,一切皆对象.属性访问可以理解为是从一个已有的对象中获得另一个对象的方法.对象属性的访问涉及到对象的 __dict__ 属性.描述符等概念,以及 __getattribute__. ...
- python面向对象属性_Python面向对象属性
也是好久没有更新过了,今天主要想写的就是关于面向的对象的属性的问题. 属性的解释来看,能够简单的理解为方法但是是用字段的方式来调用方法.除此之外,另外一种是不加装饰器,利用python提供方式来写,根 ...
- python类的属性和对象属性_python 类属性、对象属性-阿里云开发者社区
类的普通属性: dir(Myclass), 返回一个key列表: Myclass.__dir__,返回一个字典: 1.类的数据属性: 2.类的方法: 类的特殊属性: 1.Myclass.__name_ ...
- python属于私有属性_Python私有属性和受保护的属性原理解析
前言: Python不能像Java那样使用 private 和 protected 修饰符创建私有属性和受保护的属性,但是Python有个简单的机制,能避免子类意外覆盖"私有"属性 ...
- python实例属性与类属性_Python类属性与实例属性用法分析
容器(Collections) Python附带一个模块,它包含许多容器数据类型,名字叫作collections.我们将讨论它的作用和用法. 我们将讨论的是: - defaultdict - coun ...
- python的实例属性_python 实例属性和类属性
如何在一个类中定义一些常量,每个对象都可以方便访问这些常量而不用重新构造? 第一个问题,在 Python 的类里,你只需要和函数并列地声明并赋值,就可以实现这一点, 例如这段代码中的 WELCOME_ ...
- python中init外面的属性_Python mock属性在\uyu init中定义和设置__
我正在尝试为一个应用程序编写一些单元测试,我使用python mock.我对其他嘲弄库很熟悉,直到现在也没遇到过什么麻烦.我试图模拟对父类的init块中的属性集的链式调用.以下是我需要的示例:clas ...
- python 私有属性_Python 私有属性和私有方法
类的私有属性和方法 Python是个开放的语言,默认情况下所有的属性和方法都是公开的 或者叫公有方法,不像C++和 Java中有明确的public,private 关键字来区分私有公有. Python ...
最新文章
- 主机信息收集技术 -Nmap
- c语言spi测试代码,spi_test.c的spi跟踪(spi 数据传送流程)
- 在html中写三角,css3怎么写三角形?
- layui的tree实现 struts 2+layui+jsp
- python 干什么工作具有明显优势-Python 的优势在哪里?
- linux不同内核驱动移植问题,基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)...
- Java 多线程 简单实例 (Thread)
- shape中的ring标签的使用方法
- java json解析哪个好_java常用的几种json解析工具使用
- VsCode同步印象笔记
- 新手iso系统怎么安装 新手安装iso镜像文件详细步骤
- APP多平台快速切换
- c语言控制台数字键打地鼠,C语言编程打地鼠
- office 论文 页码_WORD目录,页眉,页脚,页码设置技巧 为你的毕业论文收藏吧-以Word 2013演示...
- 【秒懂】数据分析没头绪?这七种高手常用统计分析方法都帮你总结好了!
- python 怎么算l2范数_向量范数与矩阵范数(L0, L1, L2)
- 【网络安全态势感知学习笔记】——“行远自迩”基础篇一:网络安全态势感知的基本概念
- 城市三级联动功能实现
- vue如何配置兼容ie es6转es5
- 追梦PM——记我250天的互联网产品经理求职历程
热门文章
- 制作不同方向的三角形(border属性)
- Android工程的目录说明
- python如何写各种小工具_python写了个小工具
- html获取url后面的参数_Golang Gin 实战(四)| URL查询参数的获取和原理分析
- java必学_Java基础系列之初识JAVA
- [洪流学堂]Hololens开发入门篇2之Hello World
- Linux命令完全指南route,Linux命令--route
- (三)使用Keras构建移动风格迁移CycleGAN
- 通过GitHub Actions构建和部署Jekyll网站
- stat在python中_stat模块接口