Was kann `__init__` tun, was` __new__` nicht kann?
In Python,__new__
wird verwendet, um unveränderliche Typen zu initialisieren und__init__
initialisiert normalerweise veränderbare Typen. Wenn__init__
wurden aus der Sprache entfernt, was konnte (leicht) nicht mehr gemacht werden?
Beispielsweise
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
Könnte mit @ umgeschrieben werd__new__
so was
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
Erklärung zum Umfang der Frage: Dies ist keine Frage darüber, wie__init__
und__new__
verwendet werden oder was ist der Unterschied zwischen ihnen. Dies ist eine Frage darüber, was passieren würde, wenn__init__
wurden aus der Sprache entfernt. Würde etwas kaputt gehen? Wäre etwas viel schwieriger oder unmöglich zu tun?