python类中的super,原理如何?MRO是什么东东?
2023-09-27 14:28:45 时间
下面这个URL解释得比较清楚。
http://python.jobbole.com/86787/?utm_source=group.jobbole.com utm_medium=relatedArticles
================
首先得说明的是,Python的类分为经典类 和 新式类
经典类是python2.2之前的东西,但是在2.7还在兼容,但是在3之后的版本就只承认新式类了
新式类在python2.2之后的版本中都可以使用
2.经典类在类多重继承的时候是采用从左到右深度优先原则匹配方法的..而新式类是采用C3算法(不同于广度优先)进行匹配的
3.经典类是没有__MRO__和instance.mro()调用的,而新式类是有的.
为什么不用经典类,要更换到新式类因为在经典类中的多重继承会有些问题…可能导致在继承树中的方法查询绕过后面的父类:
在经典类中,你如果要访问父类的话,是用类名来访问的..
这样子看起来没三问题,但是如果类的继承结构比较复杂,会导致代码的可维护性很差..
所以新式类推出了super这个东西…
事实上,对于你定义的每一个类,Python 会计算出一个方法解析顺序(Method Resolution Order, MRO)列表,它代表了类继承的顺序,我们可以使用下面的方式获得某个类的 MRO 列表:
那这个 MRO 列表的顺序是怎么定的呢,它是通过一个 C3 线性化算法来实现的,这里我们就不去深究这个算法了,感兴趣的读者可以自己去了解一下,总的来说,一个类的 MRO 列表就是合并所有父类的 MRO 列表,并遵循以下三条原则:
子类永远在父类前面 如果有多个父类,会根据它们在列表中的顺序被检查 如果对下一个类存在两个合法的选择,选择第一个父类 最佳实现: 避免多重继承 super使用一致 不要混用经典类和新式类 调用父类的时候注意检查类层次 事实上,super 和父类没有实质性的关联。 super(cls, inst) 获得的是 cls 在 inst 的 MRO 列表中的下一个类。测试代码:
#!/usr/bin/env python # -*- coding: utf-8 -*-
波士顿矩阵|原理+Python全流程实现 很多公司中都有着不同的产品或者是业务线,但是对于繁琐的业务来说通常我们希望根据业务的好坏进行合理的资源分配,对于这种“好坏”的判断,波士顿矩阵出现了。
Python with关键字原理详解 对于正确的处理涉及到异常的资源管理时,需要使用 `try/finally` 代码结构,这样的结构一多会导致整体代码结构 **很臃肿繁琐,不易读、不美观**,因此在 **Python2.6** 版本推出 `with` 关键字。
multi-class分类模型评估指标的定义、原理及其Python实现 本文介绍multi-class分类任务中的模型评估指标及其使用Python的实现方式(包括使用sklearn进行实现,以及使用原生Python函数进行实现的操作)。 本文使用的示例是在英文多标签文本分类数据集AAPD数据集上,使用fastText包运算得到的多标签分类结果,与真实标签之间计算对应的指标结果(原则上使用one-label标签应该也能这么算,我就不另写了)。本文第一节将介绍相应数据的处理方式,第二节及其后是各指标的原理和计算方式。
相关文章
- 朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)
- Python 基于积分原理计算定积分并可视化数值积分计算的动画过程
- 跟我学Python图像处理丨图像分类原理与案例
- 跟我学Python图像处理丨带你掌握傅里叶变换原理及实现
- python程序daemon化
- Python Web学习笔记之WebSocket原理说明
- Python Web学习笔记之TCP/IP协议原理与介绍
- Python 实现随机打乱字符串
- DBSCAN聚类算法 Python 代码
- [Python]机器学习:PageRank原理与实现
- 百度图片爬虫-python版
- Python之路【目录】
- 干货 | 轮廓逼近原理与OpenCV应用(附Python-OpenCV文档下载)
- python matplotlib.pyplot学习记录
- python pep8编码风格学习记录(转)
- 成功解决:Can‘t find Python executable “python“, you can set the PYTHON env variable.
- Python写一个Windows下的android设备截图工具
- Python+moviepy音视频剪辑:视频帧数据的本质、Clip的fl方法进行变换处理的原理以及滚屏案例
- PyQt(Python+Qt)学习随笔:Qt Designer中部件mimimumSize和maximumSize的含义
- 转:关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解
- python flask url参数
- python装饰器实现对异常代码出现进行监控
- Python出现UnicodeEncodeError: 'gbk' codec can't encode character 'u22ef' in position 17: ........错误
- 在这个人人都想暴富的时代,学会我交给你的Python躺赚大法,带你走进尔康的生活。
- 【错误记录】Mac 中 IntelliJ IDEA 运行 Python 程序报错 ( pip 21.0 will drop support for Python 2.7 in January 20 )
- 关于Python爬虫原理和数据抓取1.1
- python数据结构,快慢指针