Чем отличаются методы __init__ и __new__ в классе Python? В каких случаях имеет смысл переопределять __new__?
__new__ vs __init__
Ответ 1 / 1
__new__(cls, ...) — статический/классовый метод, который создаёт объект (вызывает выделение памяти) и возвращает инстанс.
__init__(self, ...) — инициализирует уже созданный объект.
Последовательность:
1) вызывается Class.__new__
2) возвращается объект
3) вызывается __init__ для этого объекта
__new__ переопределяют, когда:
- нужно контролировать создание объектов (паттерн Singleton)
- создаём экземпляр другого класса
- работаем с неизменяемыми типами (например, наследуемся от tuple).