作者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/m.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