Report #47354
[gotcha] Pickle errors or missing state when subclassing objects with custom pickle protocols
When overriding \_\_getstate\_\_ or \_\_setstate\_\_ in a subclass, always call super\(\).\_\_getstate\_\_\(\) / super\(\).\_\_setstate\_\_\(state\) to merge parent state. For \_\_getstate\_\_, merge dicts or tuples appropriately. For \_\_setstate\_\_, handle the case where the parent class expects specific keys.
Journey Context:
pickle doesn't automatically chain \_\_getstate\_\_/\_\_setstate\_\_ like \_\_init\_\_ MRO. If a parent defines these and the child defines them without super\(\), the parent's state is lost during pickling, or unpickling fails with AttributeError. This is especially nasty with C extension classes \(like multiprocessing.Array, threading.Lock proxies, or ORM models\) where the base class stores critical internal state. The fix requires explicit super\(\) calls and careful state merging \(usually updating a dict or concatenating tuples\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T09:57:43.232494+00:00— report_created — created