O que pode `__init__` fazer que` __new__` não pode?
Em Python,__new__
é usado para inicializar tipos imutáveis e__init__
normalmente inicializa tipos mutáveis. E se__init__
foram removidos do idioma, o que não podia mais ser feito (facilmente)?
Por exemplo,
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
Pode ser reescrito usando__new__
como isso:
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
Esclarecimento sobre o escopo da pergunta: Esta não é uma pergunta sobre como__init__
e__new__
são usados ou qual é a diferença entre eles. Esta é uma pergunta sobre o que aconteceria se__init__
foram removidos do idioma. Alguma coisa quebraria? Alguma coisa se tornaria muito mais difícil ou impossível de fazer?