Report #7657
[gotcha] super\(\) without arguments fails when method defined outside class body
Define methods inside the class body when using zero-argument super\(\), or explicitly pass class and instance: super\(MyClass, self\). Never rely on the implicit \_\_class\_\_ cell for dynamically attached methods.
Journey Context:
Python 3's zero-argument super\(\) relies on a compiler-generated closure variable named \_\_class\_\_ that is only created when a method is defined lexically inside a class definition. If you define a function outside the class \(e.g., as a mixin helper\) and then assign it to the class \(MyClass.method = external\_func\), calling super\(\) inside that function raises RuntimeError because the \_\_class\_\_ cell is missing. Explicit super\(MyClass, self\) works because it doesn't need the implicit cell, but requires knowing the class, which breaks with multiple inheritance refactoring. The robust fix is defining methods in the class body or using explicit super with the correct class.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T03:20:56.537020+00:00— report_created — created