Python基础教程:新式类与经典类全文共6页,当前为第1页。Python基础教程:新式类与经典类全文共6页,当前为第1页。Python基础教程:新式类与经典类 Python基础教程:新式类与经典类全文共6页,当前为第1页。 Python基础教程:新式类与经典类全文共6页,当前为第1页。 1、新式类 在 py3 里面的继承 object 的类,以及它的子类都是新式类 多继承的状况下,会根据广度优先的方式查找 为什么调用父类 通过调用super获得父类实例从而可以实现该实例的初始化函数. (由于要继承父类的功能, 又要有新的功能). 挺直用法父类来调用的差异 实际上, 上面的super函数办法还可以这么写: Python基础教程:新式类与经典类全文共6页,当前为第2页。Python基础教程:新式类与经典类全文共6页,当前为第2页。 通过挺直用法父类类名来调用父类的办法, 实际也是可行的. 至少在上面的例子中效果上他们现在是一样的. 这种办法在老式类中也是唯一的调用父类的办法 (老式类没有super). 通过父类类名调用办法很常用, 比较直观. 但其效果和super还是有差异的. 例如: Python中的类有两种主要类型:新式类和经典类。在Python 3中,所有类默认都是新式类,这是因为在Python 2.2之后引入的一个重大改进。新式类是通过继承内置的`object`类创建的,这使得Python具备了更强大的面向对象特性。 1. 新式类: - **继承**:在Python 3中,如果你的类直接或间接地继承自`object`,那么它就是新式类。新式类的主要好处在于它们支持多重继承,并且能够更好地处理方法解析顺序(Method Resolution Order, MRO)。 - **多继承**:新式类在处理多继承时,采用广度优先搜索策略来查找方法。这意味着在寻找一个方法时,会首先检查当前类,然后依次检查其直接父类,最后再到间接父类。 - **super()函数**:`super()`是新式类中用于调用父类方法的关键工具。它的主要作用是在多继承情况下,确保父类的方法被正确调用,避免重复调用和解决方法解析顺序问题。通过`super()`,可以保证方法调用的线性化,避免出现钻石继承问题。 2. MRO表(Method Resolution Order): - **MRO**:MRO是类的方法解析顺序,它定义了在多继承中如何查找和调用方法。你可以通过`__mro__`属性来查看一个类的MRO列表。 - **C3线性化**:Python使用C3线性化算法来确定MRO,确保每个类的MRO满足以下两个原则: - 基类始终位于派生类之后。 - 类定义时的继承顺序影响基类间的相对顺序。 - **C3算法**:在确定MRO时,算法会找到最长的深度优先路径,然后根据基类的相对顺序排列其他路径。这个过程类似于合并排序,以保持基类间的相对顺序不变。 举例来说,如果有以下继承结构: ```python class A: pass class B(A): pass class C(A): pass class D(B, C): pass ``` 那么D的MRO将是:`D -> B -> C -> A -> object`。这意味着在调用D的实例方法时,会按照这个顺序查找并调用相应的方法。 总结来说,新式类和MRO是Python面向对象编程的重要组成部分。新式类通过`object`类提供了更好的多继承支持,而MRO则确保了方法调用的逻辑清晰和可预测性,使得编写和维护复杂的继承结构变得更加容易。在实践中,应尽量使用新式类,以充分利用Python的面向对象特性。
- 粉丝: 105
- 资源: 9354
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 各种字符串相似度和距离算法的实现Levenshtein、Jaro-winkler、n-Gram、Q-Gram、Jaccard index、最长公共子序列编辑距离、余弦相似度…….zip
- 运用python生成的跳跃的爱心
- 包括用 Java 编写的程序 欢迎您在此做出贡献!.zip
- (源码)基于QT框架的学生管理系统.zip
- 功能齐全的 Java Socket.IO 客户端库,兼容 Socket.IO v1.0 及更高版本 .zip
- 功能性 javascript 研讨会 无需任何库(即无需下划线),只需 ES5 .zip
- 分享Java相关的东西 - Java安全漫谈笔记相关内容.zip
- 具有适合 Java 应用程序的顺序定义的 Cloud Native Buildpack.zip
- 网络建设运维资料库职业
- 关于 Java 的一切.zip