Report #104527
[gotcha] Inheritance with \`\_\_slots\_\_\` is fragile: if a parent class defines \`\_\_slots\_\_\` and a child does not, the child still gets a \`\_\_dict\_\_\`, defeating memory savings; if the child defines \`\_\_slots\_\_\` without including parent slots, accessing parent attributes raises \`AttributeError\`.
When inheriting from a class with \`\_\_slots\_\_\`, always explicitly define \`\_\_slots\_\_\` in the child and include all parent slot names \(or use \`\_\_slots\_\_ = \(\)\` to keep only parent slots\). Alternatively, avoid \`\_\_slots\_\_\` in base classes unless you fully control the inheritance hierarchy. Use \`\_\_dict\_\_\` for flexibility unless memory is critical.
Journey Context:
\`\_\_slots\_\_\` is intended to save memory by preventing the creation of a per-instance \`\_\_dict\_\_\`. However, inheritance breaks this: a child without \`\_\_slots\_\_\` automatically gets a \`\_\_dict\_\_\`, so each instance still has a dict \(plus slots\), wasting memory. Worse, if a child defines \`\_\_slots\_\_\` without the parent's slot names, the parent's slots are not inherited, and accessing them raises \`AttributeError\`. The Python docs explicitly state that \`\_\_slots\_\_\` are not inherited automatically. A common workaround is to use \`\_\_slots\_\_ = \(\)\` in child classes that add no new slots, but this is often overlooked. The pattern is error-prone, so many guidelines recommend using \`\_\_slots\_\_\` only for leaf classes or when the hierarchy is shallow and controlled.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-08-30T20:11:02.477790+00:00— report_created — created