Understanding __init__ in Python: How It Differs from Regular Functions Like print()

Rajeev Bagra 2026-04-12

Last Updated on October 19, 2025 by Rajeev Bagra

When learning Python and exploring object-oriented programming (OOP), beginners often encounter something that looks like a function but behaves differently:

def __init__(self, ...): 

At first glance, it seems like we’re just defining a function inside a class. But what’s really going on? Why doesn’t this behave like a regular function like print() or len()? Let’s break it down.


Is __init__ a Function?

Yes — __init__ is a function, but it’s a special kind of function in Python known as a dunder method (short for “double underscore”).

More specifically, __init__ is a constructor. It’s automatically called when a new object is created from a class. You can think of it as a setup function that runs only once when you create an object.


Example: Defining a Class With __init__

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

Now when you create a new Person object:

p1 = Person("Alice", 30) 

This automatically triggers:

__init__(self=p1, name="Alice", age=30) 

Which sets:

p1.name = "Alice" p1.age = 30 

How __init__ Differs From Regular Functions

Let’s compare it to a built-in function like print():

Featureprint()__init__()
Where it livesGlobally availableInside a class
When it’s calledWhen you type print(...)Automatically, when you create an object
PurposeDisplay informationInitialize object data
Defined byPython’s standard libraryYou (in your class definition)

Each Class Has Its Own __init__

Unlike built-in functions which are defined once and reused globally, each class in Python defines its own version of __init__, tailored to what that class represents.

Example: Two Different __init__ Methods

class Dog:     def __init__(self, breed):         self.breed = breed  class Car:     def __init__(self, brand, year):         self.brand = brand         self.year = year 

Usage:

d = Dog("Labrador") c = Car("Toyota", 2020)  print(d.breed)   # Labrador print(c.brand)   # Toyota print(c.year)    # 2020 

The Dog class and Car class both have their own custom initialization logic, defined by their own __init__ methods.


Summary

ConceptMeaning
__init__Special method to initialize a new object
Defined per classYes, each class has its own __init__
Called automaticallyYes, when you create an object like obj = Class()
PurposeSet up the initial state of the object
Difference from print()print() is global and reused; __init__ is class-specific

Final Thoughts

The __init__ method may look like just another function, but it plays a key role in Python’s object-oriented design. Think of it as the birth script for every object — customizing how it starts its life. And unlike regular functions like print() or input(), __init__ is yours to define inside each class, making it incredibly flexible and powerful.

Want to practice? Try creating your own class with __init__ and explore how object data is stored and accessed. It’s one of the most fundamental skills in Python programming!


Leave a Comment
Submitted successfully!

Recommended Articles