new создаёт и возвращает объект, а init инициализирует уже созданный экземпляр. new получает cls, init — self и должен вернуть None.
Чем __new__ отличается от __init__?
__new__ создаёт и возвращает объект, а __init__ инициализирует уже созданный экземпляр. __new__ получает cls, __init__ — self и должен вернуть None.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
new создаёт и возвращает объект, а init инициализирует уже созданный экземпляр. new получает cls, init — self и должен вернуть None.
Обычно достаточно определить init. new нужен, например, при создании подкласса неизменяемого типа: значение str или int задаётся до инициализации. Если new возвращает объект, не являющийся экземпляром cls, обычный вызов этого cls не запускает его init для результата. В new часто вызывают super().__new__(cls). Не путайте эти методы с конструктором класса на уровне метакласса: вызов класса координируется type.call. Побочные эффекты в обоих методах следует делать осознанно.