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