Report #49216
[gotcha] super\(\) in multiple inheritance does not call the immediate parent class
Design classes for cooperative multiple inheritance: ensure every method uses super\(\) and accepts \*\*kwargs, and always pass \*\*kwargs up the chain. Don't assume super\(\) calls your parent.
Journey Context:
super\(\) follows the Method Resolution Order \(MRO\), not the inheritance tree. In diamond inheritance \(A->B->C->D, A->C\), super\(\) in B skips B's parent and calls C if that's next in MRO. This causes infinite recursion or skipped initialization if you write code assuming super\(\) calls the direct parent. The solution is cooperative MI: every class must accept \*\*kwargs, call super\(\).\_\_init\_\_\(\*\*kwargs\) \(or method\), and pass arguments up. This ensures the MRO chain completes correctly. The alternative \(explicit Parent.method\(self\)\) breaks super\(\) chains in mixed hierarchies.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T13:05:23.741932+00:00— report_created — created