In Python, the __init__
dunder method is an initialiser method that is used to initialise the attributes of an object after it is created, whereas the __new__
method is used to create the object.
When we define both the __new__
and the __init__
methods inside a class, Python first calls the __new__
method to create the object and then calls the __init__
method to initialise the object’s attributes.
Most programming languages (e.g. Java) require only a constructor, a special method to create + initialise objects, but Python has both a constructor and an initialiser.
New method
As stated already, when creating an object, the __new__
is called first, and it creates (returns) a new instance of the class. Python then automatically passes that instance to __init__
for initialisation.
Rarely overridden unless you’re customising class creation (e.g., singleton or immutable objects).
class Dog:
def __new__(cls, name):
print(f'Called the __new__ method.')
instance = super().__new__(cls)
return instance
def __init__(self, name):
print(f"Called the __init__ method.")
self.name = name
# Created an object
dog = Dog("Buddy")
Called the __new__ method.
Called the __init__ method.
Back to parent page: Python