Last Updated : 23 Jul, 2025
Here in this article we are going to find out whether __init__() in Python is actually private or not. So we might come across many questions like
We have already heard about the concept that private methods cannot be accessed outside the class they are declared in and also cannot be accessed from their base class but if this is true then how can we justify that we call the __init__() method every time we create the object of the class that too outside of the class and with the help of super keyword or using the class name we can also call the __init__() method of the parent class.
Accessing __init__() in PythonWe need a constructor to initialize the data members of the class when a class is instantiated. Similar to methods, a constructor also contains the collection of statements that are executed as soon as the Object is created. The init is always called whenever we initiate a class.
Python3
# initialising class
class Demo:
# defining a constructor
def __init__(self, name):
self.name = name
print("Initialised value is", self.name)
# Driver code
obj1 = Demo("GFG")
obj2 = Demo("Geeks")
obj3 = Demo("GeeksForGeeks")
Output:
Initialised value is GFG Initialised value is Geeks Initialised value is GeeksForGeeks
So if __init__() is a private method then how can we access it outside of the class? So let's check some more proofs for the same.
Accessing the __init__() for another classHere we are trying to access one constructor from another constructor of another class.
Python3
# initialising class
class Demo:
# defining a constructor
def __init__(self):
print("Init for base class")
class child(Demo):
def __init__(self):
Demo.__init__(self)
print("Init for the child class")
# Driver code
obj1 = Demo()
obj2 = child()
Output:
Init for base class Init for base class Init for the child class
So here also we can see that we can access the constructor for base class from child class which violates the property of private methods.
Private methods in PythonHere we are trying to access a private method outside a class and we get an error for the same, but in Python, we can access a private method also using the concept of Name Mangling.
Python3
# Creating a class
class Demo:
# Declaring public method
def f(self):
print("Public method")
# Declaring private method
def __f(self):
print("Private method")
# Driver's code
obj = Demo()
obj.f()
print("Using the concept of name mangling")
obj._Demo__f()
print("Without using name mangling")
obj.__f()
Output:
Public method Using the concept of name mangling Private method Without using name mangling Traceback (most recent call last): File "main.py", line 20, in <module> obj.__f() AttributeError: 'Demo' object has no attribute '__f'Conclusion
So we can conclude that __init__ is not a private method, In Python, there's nothing like private/protected by technique, it's just a convention, and we can access private/protected methods. It's more like a convention, rather than a technique. It is advised that we should follow this convention for better understanding.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4