Подробное объяснение
1️⃣ a = Singleton(): _inst равен None → создаётся объект → _inst заполнен.
2️⃣ b = Sub(): Sub не переопределяет __new__, использует родительский.
3️⃣ Внутри __new__ проверяется cls._inst. Python ищет _inst в MRO: Sub.__dict__ → Singleton.__dict__.
4️⃣ Находит _inst в Singleton (уже не None) → возвращает тот же объект.
5️⃣ a is b → True. Тип объекта — Singleton (создан через super().__new__(cls) в первый раз).
6️⃣ Вывод: True Singleton Singleton.
Почему это важно?
Наследование ломает изоляцию Singleton. Каждый подкласс должен иметь свой _inst, иначе все клонируют объект родителя.
Post #4739
697
- ✍ 2