В 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__
были удалены с языка. Что-нибудь сломается? Становится ли что-нибудь труднее или невозможнее?