Report #17455
[gotcha] Cooperative multiple inheritance chain breaks when any class omits super\(\)
In multiple inheritance hierarchies using method resolution order \(MRO\), ensure every class in the chain calls \`super\(\).method\(args\)\` and accepts \*\*kwargs to pass up the chain. If any class in the hierarchy fails to call super\(\), method resolution stops prematurely for remaining parent classes.
Journey Context:
Python's C3 linearization creates a deterministic MRO for diamond inheritance, but \`super\(\)\` is not 'call the parent class' - it is 'call the next class in the MRO'. In cooperative multiple inheritance, every class must agree to pass the baton. If one class in the middle implements \`def \_\_init\_\_\(self\): ...\` without \`super\(\).\_\_init\_\_\(\)\`, the chain breaks there - sibling branches of the inheritance tree never get initialized. This is common when mixing library classes \(like mixins\) with user classes; if the library author didn't use super\(\), the user's cooperative MI breaks. The fix requires 'cooperative' design: all methods must accept \`\*\*kwargs\`, call \`super\(\).method\(\*\*kwargs\)\`, and pass arguments up. This pattern is non-obvious because single-inheritance programmers assume super\(\) means 'parent', not 'next in line'.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T05:23:45.303133+00:00— report_created — created