__new__ vs. __init__ Methods in Python

The __init__ and __new__ magic methods play a vital role in the creation and initialization of objects in Python. Learn what each does and when to use which.

Written by Liu Zuo Lin
Published on Aug. 03, 2023
software developer writing python
Image: Shutterstock / Built In
Brand Studio Logo

When learning about object-oriented programming (OOP) in Python, you’ll come across the __init__ and  __new__ magic methods. These two methods play a vital role in the creation and initialization of objects in Python.

__new__ Method in Python Defined

In Python, __new__ is a static method that’s responsible for creating and returning a new instance of the class. It takes the class as its first argument followed by additional arguments. 

 

What Is the __new__ Method in Python?

The new method is a static method that belongs to the class itself. It’s responsible for creating and returning a new instance of the class. The method takes the class as its first argument, followed by any additional arguments that need to be passed to it.

class MyClass:
    def __new__(cls, *args, **kwargs):
        instance = super().__new__(cls)
        return instance

The __new__ method is called before the __init__ method and is often used when you need to control the object creation process, like in the case of singletons or when you want to inherit from immutable classes.

More on Python5 Pandas Groupby Tricks to Know

 

What Is the __init__ Method in Python?

The __init__ method, on the other hand, is an instance method that is responsible for initializing the newly created object. 

Python __init__ Method Defined

In Python, __init__ is an instance method that initializes a newly created object. It takes the object as its first argument followed by additional arguments.

The method takes the object as its first argument (self), followed by any additional arguments that need to be passed to it.

class MyClass:
    def __init__(self, *args, **kwargs):
        self.attribute = 'value'

The __init__ method is called after the object is created by the __new__ method, and it initializes the object attributes with the values passed as arguments.

 

Differences Between __new__ and __init__

  • __new__ is a static method, while __init__ is an instance method.
  • __new__ is responsible for creating and returning a new instance, while __init__ is responsible for initializing the attributes of the newly created object.
  • __new__ is called before __init__.
  • __new__ happens first, then __init__.
  • __new__ can return any object, while __init__ must return None.

 

When to Use __new__ in Python

You should use __new__ when you need to control the creation of the object. For example, you might want to use __new__ to:

  • Ensure that the object is of a certain type.
  • Set the object’s initial state.
  • Prevent the object from being created.

 

When to Use __init__ in Python

You should use __init__ when you need to initialize the object. For example, you might want to use __init__ to:

  • Set the object’s attributes.
  • Call the object’s superclass’ __init__ method.
  • Perform other initialization tasks.
A tutorial on how to use __new__ and __init__ in Python. | Video: mCoding

More on PythonPython TypeError: String Indices Must Be Integers

 

Python __new__ and __init__ Examples 

To better understand the differences between __new__ and __init__, let’s take a look at a simple example:

class Person:
    def __new__(cls, name, age):
        print("Creating a new Person object")
        instance = super().__new__(cls)
        return instance

    def __init__(self, name, age):
        print("Initializing the Person object")
        self.name = name
        self.age = age

person = Person("John Doe", 30)
print(f"Person's name: {person.name}, age: {person.age}")

# Creating a new Person object
# Initializing the Person object
# Person's name: John Doe, age: 30

In this example, we can see how the __new__ method is called before the __init__ method, and how they work together to create and initialize the Person object.

Explore Job Matches.