亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

精通 Python 多重继承、多层继承与方法解析顺序 (MRO)

Python 多重继承

探索 Python 如何支持多重继承、多层继承的细微差别,以及方法解析顺序 (MRO) 如何控制属性查找。

Python 多重继承

Python 允许类继承多个基类,正如 C++。此特性称多重继承,让派生类组合多个父类的行为。

语法同单继承:在括号中列出所有父类,逗号分隔。

示例

class Base1: pass
class Base2: pass
class MultiDerived(Base1, Base2): pass

此例中 MultiDerived 继承 Base1 和 Base2 的属性和方法。

精通 Python 多重继承、多层继承与方法解析顺序 (MRO)

图示:MultiDerived 从 Base1 和 Base2 接收特性。


Python 多层继承

超越两层,可链式继承:类继承自派生类,形成多层继承层级。Python 支持任意深度。

每个新派生类继承自直接父类,同时传承祖先属性。

示例:

class Base: pass
class Derived1(Base): pass
class Derived2(Derived1): pass

此处 Derived1 扩展 Base,Derived2 再扩展 Derived1,形成三层链。

精通 Python 多重继承、多层继承与方法解析顺序 (MRO)

Python 方法解析顺序 (MRO)

每个 Python 类最终继承自 object,即通用基类型。因此所有对象都是 object 实例,无论内置或用户定义:

# 输出: True
print(issubclass(list,object))
# 输出: True
print(isinstance(5.5,object))
# 输出: True
print(isinstance("Hello",object))

涉及多重继承时,Python 用深度优先、左到右遍历解析属性,不重复访问类。此遍历顺序称方法解析顺序 (MRO),保证类出现在其父类之前。

MultiDerived 的 MRO 为:[MultiDerived, Base1, Base2, object]。可通过 __mro__ 属性或 mro() 方法查看:

MultiDerived.__mro__
# (<class '__main__.MultiDerived'>, <class '__main__.Base1'>, <class '__main__.Base2'>, <class 'object'>)
MultiDerived.mro()
# [<class '__main__.MultiDerived'>, <class '__main__.Base1'>, <class '__main__.Base2'>, <class 'object'>]

复杂继承图遵循同一原则。考虑此例:

精通 Python 多重继承、多层继承与方法解析顺序 (MRO)
# MRO 演示
class X: pass
class Y: pass
class Z: pass
class A(X, Y): pass
class B(Y, Z): pass
class M(B, A, Z): pass
print(M.mro())
# 输出:
# [<class '__main__.M'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.X'>, <class '__main__.Y'>, <class '__main__.Z'>, <class 'object'>]

深入了解计算 MRO 的算法,请查阅官方 Python 文档 类继承 及 MRO 讨论。

Python

  1. 掌握 C# 继承:概念、类型与实战代码完全指南
  2. C++ 继承完全指南:构建可复用的强大类层次
  3. C# 继承完全指南:基类、派生类、初始化与多重继承替代方案
  4. 精通Python数据类型:实战指南
  5. 精通Python运算符:全面指南
  6. 精通Python Pass语句:实战指南
  7. 精通 Python 字典:创建、操作与进阶技巧
  8. 精通 Python 自定义异常:实战指南
  9. 精通 Python 面向对象编程:类、继承、封装与多态
  10. 精通 Python 继承:概念、语法与实战示例
  11. 理解 Python type() 与 isinstance():实战示例详解
  12. Python 面向对象编程完全指南:从基础到进阶