In Python, __new__() is the constructor (creates object). __init__() is the initializer (initializes object).
1class User:2 def __new__(cls, name):3 print("Creating object")4 return super().__new__(cls)56 def __init__(self, name):7 print("Initializing object")8 self.name = name910u = User("Alice")11# Creating object12# Initializing object
__new__() is rarely overridden. Used for:
int, str, tuple).__init__() — most initialization happens here.