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