В Python __new__ используется для инициализации неизменяемых типов, а __init__ обычно инициализирует изменяемые типы. Если __init__ были удалены с языка, что больше нельзя было сделать (легко)?
Например,
class A:
def __init__(self, *, x, **kwargs):
super().__init__(**kwargs)
self.x = x
class B(A):
def __init__(self, y=2, **kwargs):
super().__init__(**kwargs)
self.y = y
Можно переписать с помощью __new__ следующим образом:
class A_N:
def __new__(cls, *, x, **kwargs):
obj = super().__new__(cls, **kwargs)
obj.x = x
return obj
class B_N(A_N):
def __new__(cls, y=2, **kwargs):
obj = super().__new__(cls, **kwargs)
obj.y = y
return obj
Разъяснение для области вопроса: это не вопрос о том, как используются __init__ и __new__ или в чем разница между ними. Это вопрос о том, что произойдет, если __init__ были удалены с языка. Что-нибудь сломается? Становится ли что-нибудь труднее или невозможнее?