作者leolarrel (真.粽子无双)
看板Python
标题[问题] super() 与MRO 链断裂问题
时间Tue Feb 24 16:54:10 2026
Gemini 教我说类别就算是基底类别也要在__init__() 中加入super().__init__()
以防这个类别被不知道的人采用多重继承来继承这个基底类别, 然後说这样这个
类别就不会被叫"不合群",导致类别初始化时 __init__() MRO chain 断裂.
她讲得煞有介事, 可是我怎麽找都找不到网路文章有提到这件事
这事到底是不是真的?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.98.66 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1771923252.A.EF1.html
1F:推 s0914714: 如果啥都没继承应该是不用吧? 02/25 01:21
2F:→ s0914714: 就是单纯继承object的情况 02/25 01:22
3F:→ leolarrel: 我後来已经放弃"继承"了,改用组合 02/26 16:26
4F:推 s0914714: 大部分情况都不需要用到很复杂的继承 组合会好一点 02/26 18:13
5F:→ timTan: 写了没坏处 03/21 10:15
6F:→ timTan: 是真的 03/21 10:15
7F:推 ddavid: 都问 AI 了,你就叫它写一个最小可重现案例来证明它会出事 03/27 11:38
8F:→ ddavid: ,实际跑看看就知道它是不是瞎说了 03/27 11:39
9F:→ leolarrel: 楼上,一开始就有做了 03/27 13:00
10F:→ leolarrel: 依他的实验的确会出事,但奇怪这麽重要的事情网路论坛都 03/27 13:01
11F:→ leolarrel: 没讨论串,在这问也没几个人知道,让我怀疑再怀疑 03/27 13:02
12F:推 cuteSquirrel: 狮子专业 03/28 10:02
13F:推 ddavid: 有实例就是事实了,而之所以没有太多人谈,有可能是其实会 03/31 17:48
14F:→ ddavid: 触发这个问题的 pattern 并没有那麽常见,掉坑的人不多XD 03/31 17:49
15F:推 ddavid: 首先,如果只是单继承串发生这问题,很容易发现错误 03/31 18:16
16F:→ ddavid: 而且一般外部 package 都不会发生这问题,也就是要发生得 03/31 18:18
17F:推 ddavid: 一般是自己写的继承关系,还要刚好有触发条件 03/31 18:21
18F:→ ddavid: 毕竟用了继承也不一定每一层都会初始化,常常底层只是介面 03/31 18:23
19F:→ ddavid: 然後继承的实作层才在初始化,然後不会再往下一层了 03/31 18:23
20F:→ ddavid: 现在也不推崇用一堆层层叠叠过度设计的继承,有些情况可取 03/31 18:24
21F:→ ddavid: 代方案很多 03/31 18:24