Report #97711
[gotcha] Defining a \_\_slots\_\_ entry in a subclass with the same name as a slot in a base class raises TypeError
Do not attempt to override a base class slot in a subclass. Instead, use a different name or redesign the class hierarchy. If you need to customize behavior, consider using properties or a different base class structure.
Journey Context:
When a base class defines \_\_slots\_\_, those slots become descriptors on the class. If a subclass tries to define a slot with the same name, Python raises TypeError: 'Cannot use a slot that already exists in a base class'. This is because slots are not meant to be overridden; each slot is a fixed descriptor that stores a value in the instance's \_\_dict\_\_-like storage. Attempting to redefine it would create ambiguity. The alternative considered was to allow overriding \(like methods\), but that would break the memory layout guarantees of \_\_slots\_\_. A common gotcha is that class variables with the same name as a base slot are silently allowed and shadow the slot, which is even more dangerous. The fix is to avoid name collisions entirely. If you need to extend the slot, use a different name and provide a property that accesses the base slot.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-25T15:54:06.214184+00:00— report_created — created