Объяснение:
__new__ управляет созданием экземпляра. При первом вызове создаётся объект, при втором возвращается тот же объект. Однако __init__ вызывается каждый раз, когда создаётся «новый» объект (после __new__). В нашем случае __new__ возвращает существующий экземпляр, но Python всё равно вызывает __init__ для этого объекта при каждом вызове конструктора, если __new__ вернул экземпляр того же класса. Поэтому "init called" будет напечатано дважды. s1 is s2 — True. Часто Singleton реализуют так, чтобы __init__ выполнялся только один раз (через флаг).
#практика
Бесплатный ChatGPT
Post #4117
5.47K

- 🤣 48
- 🔥 31
- 👍 25
- 😁 21