¿Qué puede hacer __init__` que no pueda hacer __new__`?
En Python__new__
se usa para inicializar tipos inmutables y__init__
típicamente inicializa tipos mutables. Si__init__
fueron eliminados del idioma, ¿qué ya no se podía hacer (fácilmente)?
Por ejemplo,
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
Podría reescribirse usando__new__
Me gusta esto:
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
Aclaración sobre el alcance de la pregunta: no se trata de cómo__init__
y__new__
se utilizan o cuál es la diferencia entre ellos. Esta es una pregunta sobre qué pasaría si__init__
fueron eliminados del idioma. ¿Se rompería algo? ¿Se volvería algo mucho más difícil o imposible de hacer?