Skip to main content
Taught by Tech Leads

Master pipelines, cloud & AI to become an operational Data Engineer.

DataScientist.fr
Image de What is object instantiation? Practical tutorial in Python.
Python

What is object instantiation? Practical tutorial in Python.

Photo de Romain DE LA SOUCHÈRE

Tech Lead, CTO AXI Technologies

Published on 3 janvier 2025 · 6 min of reading

In the fascinating world of object-oriented programming, understanding how objects come to life is essential. Class constructors play a crucial role in this process, enabling the efficient and controlled initiation and creation of objects. Whether you are a beginner or an experienced developer, diving into the subtleties of instantiation through methods like .__init__() and .__new__() can transform your approach to coding and enrich your understanding of the foundations of programming in Python. Get ready to explore these essential mechanisms.

Class constructors and the instantiation process

In the realm of object-oriented programming in Python, constructors play an essential role in creating objects from classes. Understanding how constructors work and the instantiation process is crucial for any developer wishing to master the creation of custom objects.

Understanding constructors

A constructor is a special method of a class that is automatically called when creating a new instance of that class. In Python, the constructor is defined by the __init__ method. This method allows initializing the object's attributes with specific values at the time of its creation. Here is a simple example:
python
In this example, when instantiating Chien, the __init__ method is called, and the attributes name and age are initialized with the provided values.

The instantiation process

Instantiating a class in Python follows a well-defined process:
  1. Memory allocation: When an object is created, Python first allocates the necessary memory to store the new object.
  2. Constructor call: After memory allocation, Python calls the __init__ method to initialize the object.
  3. Object return: Once the object is initialized, a reference to this object is returned, which can be used to access the object's methods and attributes.

Constructors with default arguments

It is possible to define default arguments in the constructor, allowing the creation of objects with or without providing certain values:
python
In this example, model has a default value of "Unknown", thus allowing the creation of car1 without specifying the model.
Constructors are the cornerstone of object instantiation in Python. They offer significant flexibility to initialize objects with the desired values, making the code more readable and maintainable. By deepening your understanding of constructors, you'll be better equipped to develop robust and efficient Python applications.

Understanding the instantiation process

The instantiation process is a fundamental step when creating objects in object-oriented programming. In Python, this step involves several key phases that transform a class definition into a functional object.

Phases of the instantiation process

  1. Creation of the empty object: Before the __init__ constructor is called, Python creates an empty object. This step is handled by the special method __new__, which is responsible for allocating memory for the new object.
  2. Object initialization: Once the empty object is created, the __init__ method is called to initialize the object with the provided parameters. This is where the object's attributes are defined, and its initial state is established.
  3. Return of the instantiated object: After initialization, the object is ready to be used. The reference to this object is returned, allowing the program to interact with it through its methods and attributes.

Special method __new__

Although rarely needed for most applications, the __new__ method can be redefined to control the creation of the object. This is particularly useful in cases involving complex class inheritance or the creation of singletons.
python
In this example, __new__ is used to ensure that only one instance of the Singleton class is created.

Importance of instantiation

Instantiation is essential as it transforms the theoretical structure of a class into a usable object. It is at this moment that attributes take on concrete values and methods become operational. Understanding this process enables developers to design more efficient classes and manage objects precisely, ensuring that the desired behavior is achieved.
By mastering instantiation, developers can better anticipate and resolve potential issues related to memory management, object creation, and performance optimization in their Python applications.

Object initialization with .__init__()

Object initialization in Python is a crucial step that takes place through the special method __init__. This method is automatically invoked after an object is created, allowing for the assignment of initial values to the object's attributes.

Role of __init__

The __init__ method does not create the object (that is the role of __new__), but it initializes the attributes of the newly created object. It takes at least one parameter, self, which is a reference to the current instance of the class. Other parameters can be used to customize the object's initialization.
python
In this example, __init__ initializes a Book object with a title, an author, and a number of pages.

Conditional initialization

It is possible to add conditional logic in __init__ to handle special cases during initialization. For example, one can check the values of parameters to ensure they meet certain constraints.
python
In this example, the initial balance cannot be negative, and an exception is raised if this condition is not met.

Advantages of __init__

Using __init__ simplifies the creation of custom objects and ensures that all objects start in a valid state. This allows for centralizing the initialization logic and simplifying maintenance and evolution of the code.
In summary, __init__ is a powerful tool for defining the initial behavior of objects, providing flexibility and control to developers when designing classes in Python.

Creating objects with .__new__()

The __new__ method is a special method in Python responsible for creating an instance of a class. Unlike __init__, which initializes the object, __new__ is tasked with actually instantiating the object and returning that instance. This method is less frequently redefined than __init__, but it can be very useful in certain advanced cases, particularly for creating singletons or implementing metaclasses.

Role of __new__

The primary role of __new__ is to control the creation of instances of a class. It is called before __init__ and must return an instance of the class. If __new__ does not return an instance, __init__ will not be called.
python
In this example, the message "Creating the object" is displayed before "Initializing the object", illustrating the order of method calls.

Advanced usage of __new__

__new__ is often used to implement design patterns like the singleton, where only one instance of a class is allowed.
python
Here, __new__ is used to check if an instance already exists and to create a new one only if necessary.

Advantages of __new__

Although __new__ is rarely redefined, it offers precise control over the creation of objects, which can be crucial for certain application designs. This allows for implementing specific behaviors during the instantiation of objects, ensuring that created objects meet certain constraints or configurations.
By understanding how and when to use __new__, developers can fully leverage the power of object instantiation in Python, especially in contexts requiring optimizations or advanced structures.

Want to go further?

This topic is part of our Become a Data Analyst course. Browse the full programme, or get it by email.

Share with

Photo de Romain DE LA SOUCHÈRE

Romain DE LA SOUCHÈRE

Tech Lead, CTO AXI Technologies

Expert Data Engineering et Cloud, Romain affiche plus de 11 ans d'expérience, dont plusieurs années comme Lead Developer sur des solutions Smart Building haute performance. Il y a conçu et mis en production des moteurs de traitement capables d'absorber des centaines de milliers de données de capteurs par minute, ainsi que des bases clusterisées gérant plus de 10 millions de données dynamiques. Certifié Microsoft Azure DevOps Engineer Expert, il maîtrise aussi bien le développement back-end (Python, C#) que le DevOps (Docker, Kubernetes, Terraform) et les agents LLM. Formateur en Python, cloud, DevOps et IA générative appliquée, il forme avec une obsession : Amener chaque apprenant à concevoir et déployer des architectures réellement scalables en production.

» Learn More

Associated trainings

All our trainings
Image de la formation Become a Data Analyst
Become a Data Analyst
6 months
Intermediate
Guarantee