[问题] super() 与MRO 链断裂问题

楼主: leolarrel (真.粽子无双)   2026-02-24 16:54:10
Gemini 教我说类别就算是基底类别也要在__init__() 中加入super().__init__()
以防这个类别被不知道的人采用多重继承来继承这个基底类别, 然后说这样这个
类别就不会被叫"不合群",导致类别初始化时 __init__() MRO chain 断裂.
她讲得煞有介事, 可是我怎么找都找不到网络文章有提到这件事
这事到底是不是真的?
作者: s0914714 (YA)   2026-02-25 01:21:00
如果啥都没继承应该是不用吧?就是单纯继承object的情况
楼主: leolarrel (真.粽子无双)   2026-02-26 16:26:00
我后来已经放弃"继承"了,改用组合
作者: s0914714 (YA)   2026-02-26 18:13:00
大部分情况都不需要用到很复杂的继承 组合会好一点
作者: timTan (用口头禅区分年记)   2026-03-21 10:15:00
写了没坏处是真的
作者: ddavid (谎言接线生)   2026-03-27 11:38:00
都问 AI 了,你就叫它写一个最小可重现案例来证明它会出事,实际跑看看就知道它是不是瞎说了
楼主: leolarrel (真.粽子无双)   2026-03-27 13:00:00
楼上,一开始就有做了依他的实验的确会出事,但奇怪这么重要的事情网络论坛都没讨论串,在这问也没几个人知道,让我怀疑再怀疑
作者: cuteSquirrel (松鼠)   2026-03-28 10:02:00
狮子专业
作者: ddavid (谎言接线生)   2026-03-31 17:48:00
有实例就是事实了,而之所以没有太多人谈,有可能是其实会触发这个问题的 pattern 并没有那么常见,掉坑的人不多XD首先,如果只是单继承串发生这问题,很容易发现错误而且一般外部 package 都不会发生这问题,也就是要发生得一般是自己写的继承关系,还要刚好有触发条件毕竟用了继承也不一定每一层都会初始化,常常底层只是接口然后继承的实作层才在初始化,然后不会再往下一层了现在也不推崇用一堆层层叠叠过度设计的继承,有些情况可取代方案很多

Links booklink

Contact Us: admin [ a t ] ucptt.com