Intercepting the class instance creation process
There are two special methods concerned with the class instance creation and initialization process. These are
__init__() method is the closest to the concept of the constructor found in many object-oriented programming languages. It receives a fresh class instance together with initialization arguments and is responsible for initializing the class instance state.
The special method
__new__() is a static method that is actually responsible for creating class instances. This
__new__(cls, [,...]) method is called prior to the
__init__() initialization method. Typically, the implementation of the overridden
__new__() method invokes its superclass version using
super().__new__() with suitable arguments and modifies the instance before returning it.
__new__() method is a special-cased static method so there is no need to declare it as a static method using the