Intercepting the class instance creation process
There are two special methods concerned with the class instance creation and initialization process. These are __init__() and __new__().
The __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.
The __new__() method is a special-cased static method so there is no need to declare it as a static method using the staticmethod decorator...