吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 673|回复: 6
上一主题 下一主题
收起左侧

[学习记录] python继承与多继承

[复制链接]
跳转到指定楼层
楼主
Jruing 发表于 2026-6-30 16:21 回帖奖励

继承

class Parent:
    def greet(self):
        print("Hello from Parent")

class Child(Parent):  # 继承 Parent
    def greet(self):
        # 使用 super() 调用父类方法
        super().greet()
        print("Hello from Child")

d = Child().greet()

多继承

📌 MRO(Method Resolution Order,方法解析顺序)
✅ Python 使用 C3 线性化算法 计算 MRO,确保满足以下条件:

  • 子类优先于父类;
  • 父类按定义顺序(从左到右)考虑;
  • 保持单调性(不破坏已有的继承关系)。

示例

class 爷爷:
    pass

class 奶奶:
    pass

class 外公:
    pass

class 外婆:
    pass

class 爸爸(爷爷, 奶奶):
    pass

class 妈妈(外公, 外婆):
    pass

class 儿子(爸爸, 妈妈):
    pass

print(儿子.__mro__)

输出结果

(<class '__main__.儿子'>,
 <class '__main__.爸爸'>,
 <class '__main__.爷爷'>,
 <class '__main__.奶奶'>,
 <class '__main__.妈妈'>,
 <class '__main__.外公'>,
 <class '__main__.外婆'>,
 <class 'object'>)

验证 C3 合并规则

class 爷爷:
    pass

class 奶奶:
    pass

class 外公:
    pass

class 外婆:
    pass

class 爸爸(爷爷, 奶奶):
    pass

class 妈妈(外公, 外婆):
    pass

class 儿子(爸爸, 妈妈):
    pass

class 女儿(妈妈, 爸爸):
    pass

print(儿子.__mro__)
print(女儿.__mro__)

# 尝试引入一个同时继承 儿子 和 女儿 的子类
class 弟弟(儿子, 女儿):
    pass

print(弟弟.__mro__)

输出结果(报错)

Traceback (most recent call last):
  File "C:\workspace\test_dev\20260112.py", line 55, in 
    class 弟弟(儿子, 女儿):
TypeError: Cannot create a consistent method resolution order (MRO) for bases 爸爸, 妈妈

原因分析

  • 儿子 的 MRO 要求:爸爸 在 妈妈 之前
  • 女儿 的 MRO 要求:妈妈 在 爸爸 之前
  • 两者冲突 → C3 算法无法构造一致的线性继承顺序。

⚠️ 注意事项

MRO 并非简单的“深度优先”或“广度优先”。
在早期 Python(2.2 之前)中确实使用深度优先搜索(DFS),但存在菱形继承等问题。
C3 线性化算法解决了这些问题,确保:

  • 每个类在 MRO 中仅出现一次;
  • 继承顺序符合开发者预期且逻辑一致。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
zhhmok + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
kloco303 发表于 2026-6-30 17:20
比较形象。谢谢。学习
3#
vpvsoooo 发表于 2026-6-30 18:05
4#
threesama 发表于 2026-7-1 01:12
5#
zhhmok 发表于 2026-7-1 08:55
精辟哦,值得学习
6#
OSmile 发表于 2026-7-1 10:54
学习了,    点个赞
7#
Kayay 发表于 2026-7-1 16:00
精辟哦,点个赞,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-7-17 07:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表