That is correct. Note that you can also call the __init__ method directly on the Base class, like so:

class Child(Base):
    def __init__(self, something_else):
        Base.__init__(self, value = 20)
        self.something_else = something_else

That's the way I generally do it. But it's discouraged, because it doesn't behave very well in the presence of multiple inheritance. Of course, multiple inheritance has all sorts of odd effects of its own, and so I avoid it like the plague.

In general, if the classes you're inheriting from use super, you need to as well.

Answer from Chris B. on Stack Overflow
🌐
Real Python
realpython.com › python-class-constructor
Python Class Constructors: Control Your Object Instantiation – Real Python
January 19, 2025 - To wrap up this section, you should know that the base implementation of .__init__() comes from the built-in object class. This implementation is automatically called when you don’t provide an explicit .__init__() method in your classes. ... You can make your objects’ initialization step flexible and versatile by tweaking the .__init__() method. To this end, one of the most popular techniques is to use optional arguments. This technique allows you to write classes in which the constructor accepts different sets of input arguments at instantiation time.
🌐
Python documentation
docs.python.org › 3 › tutorial › classes.html
9. Classes — Python 3.14.3 documentation
As in Modula-3, there are no shorthands for referencing the object’s members from its methods: the method function is declared with an explicit first argument representing the object, which is provided implicitly by the call. As in Smalltalk, classes themselves are objects. This provides semantics for importing and renaming. Unlike C++ and Modula-3, built-in types can be used as base classes for extension by the user.
🌐
GeeksforGeeks
geeksforgeeks.org › python › calling-a-super-class-constructor-in-python
Calling a Super Class Constructor in Python - GeeksforGeeks
August 1, 2020 - In Python, the __init__() method is called the constructor and is always called when an object is created. ... Python has super function which allows us to access temporary object of the super class.
🌐
Medium
medium.com › @AISciencesLearn › calling-parent-class-constructor-via-a-child-class-in-python-28664f0002aa
Calling Parent Class Constructor via a Child Class in Python | by AI SCIENCES | Medium
February 8, 2023 - The following script defines a child class Circle that inherits the parent class Shape. Look at the constructor of the Circle class. It accepts three parameters name, area, and radius. Inside the constructor, the super() keyword is used to refer to the parent class.
🌐
Python
typing.python.org › en › latest › spec › constructors.html
Constructors — typing documentation
If a class does not define a __new__ method or __init__ method and does not inherit either of these methods from a base class other than object, a type checker should evaluate the argument list using the __new__ and __init__ methods from the object class. class MyClass5: pass MyClass5() # OK MyClass5(1) # Type error · When a value of type type[T] (where T is a concrete class or a type variable) is called, a type checker should evaluate the constructor call as if it is being made on the class T (or the class that represents the upper bound of type variable T).
Top answer
1 of 1
3

In C++, constructors are special operators. There is special syntax for calling a base class constructor:

class A { ... };

class B: public A {
public:
  B() : A() { ... }
  //  ^^^^^
};

If the base constructor is not called explicitly, the default constructor for the base class will be called automatically.

This is important for C++'s memory model and data model:

  • failing to call the base constructor could lead to uninitialised memory, and would definitely lead to UB
  • classes may or may not be default constructible, which affects how explicit you need to be

Python is a very different language. It has no concept of default constructors. It has no concept of uninitialised memory. And Python constructors are just an ordinary initialization method (well, as ordinary as a dunder-method can be). There is no special syntax for calling the base class init method, it's just the same as calling any other base class method.

This kind of fits into the general Python theme of having a minimal syntax, but complex, flexible semantics. The language doesn't force you to initialize your objects properly, just as it doesn't force you to only assign specific types to some variable. As the language itself won't help you, you have to use linters to check for common mistakes.

Note that Python's flavour of multiple inheritance makes it difficult or impossible to handle "base" class constructors automatically. If the class you are writing is one of multiple bases in a multiple inheritance hierarchy, then the super().__init__() call may not go to this classes' base but possibly to an unrelated sibling class. Handling that properly requires a conscious design effort.

Of course, the best move is not to play. As a dynamic language, there are very few circumstances where inheritance is the best solution in Python.

🌐
W3Schools
w3schools.com › python › python_inheritance.asp
Python Inheritance
Python Examples Python Compiler ... all the methods and properties from another class. Parent class is the class being inherited from, also called base class....
Find elsewhere
🌐
TutorialsPoint
tutorialspoint.com › object_oriented_python › object_oriented_python_inheritance_and_ploymorphism.htm
Inheritance and Polymorphism
Because of that when we try to get the get_date method from the Time class object tm we created earlier possible. ... In Python, constructor of class used to create an object (instance), and assign the value for the attributes.
🌐
Medium
medium.com › @gauravverma.career › inheritance-in-python-a7aaf1d41971
Inheritance in Python | by Gaurav Verma | Medium
December 7, 2025 - Python Inheritance Syntax is · ... method) is provided in a child class, the constructor of the base (parent) class is automatically called when an object of the child class is created....
🌐
Datadog
docs.datadoghq.com › security › code_security › static_analysis › static_analysis_rules › python-best-practices › init-call-parent
use super() to call the parent constructor
Calling the parent constructor should be done by calling super(), not by calling the parent object directly. class Class(Parent): def __init__(self): SomeClass.__init__(self) # should use super()
🌐
Codecademy Forums
discuss.codecademy.com › frequently asked questions › python faq
Does the constructor for an inherited class have to call the parent constructor? - Python FAQ - Codecademy Forums
September 14, 2018 - Question Is it required that the constructor for an inherited class call the parent class __init__() method? Answer No, an inherited class is not required to call the __init__() method of the parent class. If no __init__() method is implemented in the inherited class, then the parent __init__() will be called automatically when an object of the inherited class is created.
🌐
Delft Stack
delftstack.com › home › howto › python › python call super constructor
How to Invoke the Super Constructor of the Parent Class in Python | Delft Stack
February 2, 2024 - The Person class is the parent class, and the Student class is the child class. The parent and child classes have setters and getters for all its attributes. The child class inherits all the attributes and the methods of the parent class. This statement super().__init__(name, age, gender) invoked the Person class’s constructor.
Top answer
1 of 3
2

is the sole purpose of doing that is to just ensure that the base class is initialized?

Well yes, but what do you mean, just?

Assuming your base class has a reason to exist, it must do something.

Unless it's just a convenient collection of @staticmethod functions, whatever it does might depend on its __init__ having been called, because that's how class objects work.

Even if your base class has an empty __init__ today, it's sensible to call it, in case that changes in the future.

Or, would there be other possible use cases?

The use case is to make sure that the base class part of your object is correctly initialized. Without that, you can't safely call any of its non-static methods.

In principle your base class could do something tricksy in its __init__ (starting a background thread, or registering the instance with some singleton, or ... whatever). So yes, there could be effects other than just assigning instance variables, but this is still part of initializing an object of that base class.

2 of 3
1

In C++ or Java, the compiler will require you to call the base class constructor (either by automatically inserting a zero-argument call or by giving you an error).

Python requires you to call it yourself, as it is written:

If a base class has an __init__() method, the derived class’s __init__() method, if any, must explicitly call it to ensure proper initialization of the base class part of the instance

The reason why is a principle of object oriented design. An A "is-a" Base, which could also be written equivalently as an A "has-a" Base. Unless you specifically want to interfere with the implementation of Base, you have to allow the object to be initialized as designed. Skipping the constructor will leave the Base object improperly initialized, disappointing anyone who expects it to behave as a Base object ought to.

When overriding a method besides the constructor, it is the programmer's discretion to delegate to the base class implementation or to override it entirely. This can still lead to incorrect behavior --- several API docs I can think of pepper the documentation with "If you override this method, you should call super" for various methods.

🌐
EyeHunts
tutorial.eyehunts.com › home › python call parent constructor | example code
Python call parent constructor | Example code
August 12, 2022 - Calling a parent constructor within a child class executes the operations of the parent class constructor in the child class. ... Simple example code. Python recommends using super().
🌐
Python.org
discuss.python.org › ideas
Implicit initialisation of inherited attributes - Ideas - Discussions on Python.org
July 26, 2020 - In Python, I have noticed that the __init__ constructor of a class does not implicitly call the __init__ constructor of its base class. Indeed, this program: class A: def __init__(self): print("A") class B(A): def __init__(self): print("B") b = B() outputs: B This contrasts with C++ for which the constructor of a class implicitly calls the default constructor of its base class.
🌐
Python Guides
pythonguides.com › call-a-base-class-constructor-with-arguments-in-python
How To Call A Base Class Constructor With Arguments In Python?
October 31, 2024 - The most common and recommended way to call a base class constructor in Python is by using the super() function.