Report #55835
[gotcha] TypeError: cannot create weak reference to object of type 'MyClass' when using \_\_slots\_\_
Explicitly add \`'\_\_weakref\_\_'\` to the \`\_\_slots\_\_\` sequence \(e.g., \`\_\_slots\_\_ = \('x', 'y', '\_\_weakref\_\_'\)\`\) if weak references are needed; otherwise, instances will not support weakref.
Journey Context:
By default, \`\_\_slots\_\_\` replaces the instance \`\_\_dict\_\_\` with a fixed-size array for memory efficiency and faster attribute access. The implementation also removes support for weak references unless explicitly requested by including \`'\_\_weakref\_\_'\` in the slots list. This is a breaking change from the default object behavior where all instances support weak references. Code using caches \(weakref.WeakKeyDictionary\), signals, or ORMs \(SQLAlchemy\) that rely on weakrefs will raise TypeError immediately upon attempting to create the weakref. The fix requires modifying the class definition; there is no runtime workaround. Omitting \`\_\_weakref\_\_\` saves memory, making it a deliberate trade-off, but the error is surprising because \`\_\_slots\_\_\` appears to be only about attribute declaration.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T00:12:38.926282+00:00— report_created — created