Report #15947
[gotcha] Mutable class variables shared across inheritance hierarchy causing state pollution between subclasses
Never use mutable literals \(lists, dicts, sets\) as class attributes; use None as sentinel and initialize in \_\_init\_\_, or use immutable tuples, or use a factory function with \_\_init\_subclass\_\_ to isolate per-subclass state.
Journey Context:
Developers assume class variables are per-class, but Python's MRO means subclasses look up the attribute in the parent if not overridden. A mutable object like \`items = \[\]\` in a base class creates a single list shared by the base and all subclasses unless explicitly shadowed. The fix isn't just 'use instance variables' because sometimes you want per-class state; the pattern is to use a sentinel and check \`if self.items is None\` in \`\_\_init\_\_\`, or use \`\_\_init\_subclass\_\_\` to inject fresh mutable objects into each subclass's namespace.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T01:24:30.208330+00:00— report_created — created