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.
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.
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.
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 returnNone
.
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.
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
What is init in Python?
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.
Why does Python need __init__?
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.
What is __init__ used for?
__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.
What is __new__ used for?
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__
.
What is the difference between __init__ and __new__?
__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
.