__new__ creates and returns a new instance before __init__ runs. Calling Foo(10) invokes __new__, which creates the object, triggers __init__, and returns the initialized instance. __init__ adds attributes; it does not create the object. Custom __new__ implementations are rarely necessary. section 10.8
Trace a simple instance
With class Foo defining __init__(self, x) and assigning self.x = x, calling f = Foo(10) creates the instance through __new__, initializes x through __init__, and makes f.x available. section 10.8
When we create an object, __new__ is invoked.
Use the sequence diagrams to distinguish instance creation by __new__ from initialization by __init__ and final return to the caller. section 10.8


