__init__ vs. __new__ Methods in Python

In Python, the __init__ method initializes the attributes of a newly created object of a class, while the __new__ method creates and returns a new object of a class. Learn more about what each does and when to use which.

Written by Liu Zuo Lin
software developer writing python
Image: Shutterstock / Built In
Brand Studio Logo
UPDATED BY
Brennan Whitfield | Jan 15, 2025

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.

__init__ and __new__ Methods in Python Defined

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

 

A tutorial on how to use __new__ and __init__ in Python. | Video: mCoding

What Is the __init__ Method in Python?

The __init__ method is an instance method that is responsible for initializing a newly created instance (object) of a class

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 an object is created by the __new__ method, and it initializes the object attributes with the values passed as arguments.

RelatedA Beginner’s Guide to Dot Notation

 

What Is the __new__ Method in Python?

The __new__ method is a static method that belongs to a class itself. It’s responsible for creating and returning a new instance (object) 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.

Related5 Pandas Groupby Tricks to Know

 

Differences Between __init__ and __new__

  • __init__ is an instance method, while __new__ is a static method.
  • __new__ is responsible for creating and returning a new instance (object), 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 __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.

 

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.

RelatedPython TypeError: String Indices Must Be Integers

 

Python __init__ and __new__ Examples

To better understand the differences between __init__ and __new__, 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.

Frequently Asked Questions

The __init__ method in Python is an instance method that initializes a newly created instance (object) of a class. After a new object is created, __init__ is automatically called to initialize the object’s attributes with the values given as arguments.

The __init__ method in Python helps define object attributes necessary to the class program from the start, plus it facilitates any initial code setup when working with objects and classes.

__init__ is an instance method in Python often used as a constructor to initialize the attributes of a newly created instance (object) of a class.

The __new__ method in Python is a static method and constructor that creates and returns a new instance (object) of a class. __new__ is often used to help control the creation of objects, and is called before using __init__.

__init__ and __new__ are both special methods in Python, but they each serve different purposes. __new__  is a static method used to create a new instance of class, while __init__ is an instance method used to initialize the instance after it has been created.  __new__ is often called first to return a new instance, whereas __init__ is called afterwards to set up the instance’s attributes. __new__ can also return any object, while __init__ must return None.

Explore Job Matches.