Constructors in Python

Last Updated : 8 Jun, 2026

Constructors are special methods used to initialize objects when they are created from a class. Object creation and initialization are handled through the __new__() and __init__() methods. Constructors help assign initial values to object attributes and prepare objects for use.

When an object is created:

  • The __new__() method creates and returns a new instance of the class.
  • The __init__() method initializes the newly created object.
  • The object becomes ready for use.

__new__() Method

This method is responsible for creating a new instance of a class. It allocates memory and returns the new object. It is called before __init__.

Syntax:

Python
class ClassName:
    def __new__(cls, parameters):
        instance = super(ClassName, cls).__new__(cls)
        return instance

To learn more, please refer to this article: __new__

__init__() Method

This method initializes the newly created instance and is commonly used as a constructor in Python. It is called immediately after the object is created by __new__ method and is responsible for initializing attributes of the instance.

Syntax:

Python
class ClassName:
    def __init__(self, parameters):
        self.attribute = value

Note: It is called after __new__ and does not return anything (it returns None by default).

To learn more, please refer to this article: __init__

Differences Between __init__ and __new__

Feature__new__()__init__()
PurposeCreates an objectInitializes an object
Called WhenBefore object creation completesAfter object creation
Return ValueMust return an object instanceReturns None
UsageRarely overriddenCommonly overridden
Typical Use CaseSingleton, immutable objectsSetting attribute values

Types of Constructors

Constructors can be of two types.

1. Default Constructor

A default constructor does not take any parameters other than self. It initializes the object with default attribute values.

Python
class Car:
    def __init__(self):

        #Initialize the Car with default attributes
        self.make = "Toyota"
        self.model = "Corolla"
        self.year = 2020

# Creating an instance using the default constructor
car = Car()
print(car.make)
print(car.model)
print(car.year)

Output
Toyota
Corolla
2020

Note: If no constructor is defined in a class, Python automatically provides a default constructor that creates the object without initializing custom attributes.

Explanation:

  • Define Constructor: __init__() is defined without additional parameters.
  • Initialize Attributes: Default values are assigned to make, model, and year.
  • Create Object: Car() automatically invokes the constructor.
  • Access Attributes: Object attributes are printed using dot notation.

2. Parameterized Constructor

A parameterized constructor accepts arguments to initialize the object's attributes with specific values.

Python
class Car:
    def __init__(self, make, model, year):
      
        #Initialize the Car with specific attributes.
        self.make = make
        self.model = model
        self.year = year

# Creating an instance using the parameterized constructor
car = Car("Honda", "Civic", 2022)
print(car.make)
print(car.model)
print(car.year)

Output
Honda
Civic
2022

Explanation:

  • Accept Parameters: The constructor receives make, model, and year as arguments.
  • Assign Values: Constructor arguments are assigned to instance attributes.
  • Create Object: Values are passed while creating the object.
  • Display Attributes: The stored values are accessed through the object.
Comment