Saturday, September 6, 2025
HomeLanguages__init_subclass__ in Python

__init_subclass__ in Python

Prerequisites: Python Classes and Objects, Inheritance in Python

Regardless of any programming languages, Inheritance is one of the most important topics in Object-Oriented Programming Concepts. Inheritance is a concept of defining a class in terms of another class. As per inheritance, we know that a superclass reference can hold its subclass reference. We all know that the behavior of the superclass can be altered according to the implementation of its sub-class(es).

But now, we can alter the behavior of the sub-class(es) by using __init_subclass__

__init_subclass__




# defining a SuperClass
class SuperClass:
  
     # defining __init_subclass__ method
    def __init_subclass__(cls, **kwargs):
        cls.default_name ="Inherited Class"
  
# defining a SubClass
class SubClass(SuperClass):
  
     # an attribute of SubClass
    default_name ="SubClass" 
    print(default_name)
  
subclass = SubClass()
print(subclass.default_name)


Output :

SubClass
Inherited Class

Understanding the code

  • In the above example, there are 2 classes(i.e Super Class and SubClass) and SubClass is inherited from SuperClass. default_name is an attribute of SubClass.
  • The value of attribute default_name is altered by SuperClass by using __init_subclass__ method.
  • cls is referred to the subclass(es) which are inherited. Keyword arguments(**kwargs) which are given to a new class are passed to the parent’s class __init_subclass__.
  • For compatibility with other subclasses using __init_subclass__, one should take out the needed keyword arguments and pass the others over to the base class(Super Class).

This __init_subclass__ closely look alike Decorator class. But where class decorators only affect the specific class they are applied to, __init_subclass__ solely applies to future sub-classes of the class defining the method. It means we can alter/define the behavior of any new classes which are inherited from super-class.
Example:




# defining a SuperClass
class SuperClass:
    def __init_subclass__(cls, default_name, **kwargs):
        cls.default_name = default_name
  
# defining a subclass
class SubClass1(SuperClass, default_name ="SubClass1"):
    pass
  
# defining another subclass
class SubClass2(SuperClass, default_name ="SubClass2"):
    default_name = "InheritedClass"
  
  
# references for subclasses
subClass1 = SubClass1()
subClass2 = SubClass2()
  
print(subClass1.default_name)
print(subClass2.default_name)


Output :

SubClass1
SubClass2

By this we can conclude that __init_subclass__ method is used to alter the behavior of subclasses which may be created in future.

RELATED ARTICLES

Most Popular

Dominic
32270 POSTS0 COMMENTS
Milvus
82 POSTS0 COMMENTS
Nango Kala
6639 POSTS0 COMMENTS
Nicole Veronica
11803 POSTS0 COMMENTS
Nokonwaba Nkukhwana
11869 POSTS0 COMMENTS
Shaida Kate Naidoo
6752 POSTS0 COMMENTS
Ted Musemwa
7029 POSTS0 COMMENTS
Thapelo Manthata
6704 POSTS0 COMMENTS
Umr Jansen
6721 POSTS0 COMMENTS