本文共 1092 字,大约阅读时间需要 3 分钟。
对于如下的继承关系,Class MyClass 的对象调用的方法 display 在 Class Base 和 Class B 中都存在,实际调用的是哪一个?
可见,类的继承关系构建如下:
Base / \ A B/MyClass
分析类的MRO(Method Resolution Order)可以更清晰地理解问题。当分别查看obj.display()的执行流程时,结果表明最终执行的是Class Base的display方法,而不是Class B的display方法。具体分析如下:
类继承关系解析:
display方法的查找规则:
实际调用的原因:
结论:在上述继承关系中,MyClass对象调用display方法时,实际调用的是Class Base中的display方法,而不是Class B中的display方法。这是因为Python的MRO机制将Base类作为B类和A类的共同基类,并在查找过程中优先考虑Base类的方法。
这个现象表明,在多层继承关系中,理解类的MRO非常重要,因为它直接影响方法的查找和调用结果。虽然B类也有display方法,但Base类的方法会被优先选用,除非在更具体的子类中重新定义了该方法。
转载地址:http://dgwrz.baihongyu.com/