Inner Class in Python

A Python is an Object-Oriented Programming Language, everything in python is related to objects, methods, and properties. A class is a user-defined blueprint or a prototype, which we can use to create the objects of a class. The class is defined by using the class keyword.

Example of class – 

filter_none

edit
close

play_arrow

link
brightness_4
code

# create a Geeksforgeeks class
class Geeksforgeeks :
   gfg = 10

chevron_right


First of all, we have to understand the __init__() built-in method for understanding the meaning of classes. Whenever the class is being initiated, a method namely __init__() is always executed. An __init__() method is used to assign the values to object properties or to perform the other method that is required to complete when the object is created.

Example of class with __init__() method –
 

filter_none

edit
close

play_arrow

link
brightness_4
code

# create a Geeksforgeeks class
class Geeksforgeeks:
  
 # constructor method
 def __init__(self):
  
  # object attributes
  self.course = "Campus preparation"
  self.duration = "2 months"
   
 # define a show method
 # for printing the content
 def show(self):
  print("Course:", self.course)
  print("Duration:", self.duration)
  
# create Geeksforgeeks 
# class object
outer = Geeksforgeeks()
  
# method calling
outer.show()

chevron_right


Output:



 Course : Campus Preparation
Duration : As per your schedule 

Inner Class in Python

A class defined in another class is known as inner class or nested class. If an object is created using child class means inner class then the object can also be used by parent class or root class. A parent class can have one or more inner class but generally inner classes are avoided.

We can make our code even more object oriented by using inner class. A single object of the class can hold multiple sub-objects. We can use multiple sub-objects to give a good structure to our program.

Example – 

First we create a class and then the constructor of the class.

After creating a class, we will create another class within that class, the class inside another class will be called as inner class.

filter_none

edit
close

play_arrow

link
brightness_4
code

# create a Color class
class Color:
    
  # constructor method
  def __init__(self):
    # object attributes
    self.name = 'Green'
    self.lg = self.Lightgreen()
    
  def show(self):
    print("Name:", self.name)
    
  # create Lightgreen class
  class Lightgreen:
     def __init__(self):
        self.name = 'Light Green'
        self.code = '024avc'
    
     def display(self):
        print("Name:", self.name)
        print("Code:", self.code)
  
# create Color class object
outer = Color()
  
# method calling
outer.show()
  
# create a Lightgreen 
# inner class object
g = outer.lg
  
# inner class method calling
g.display()

chevron_right


Output:

 Green
Name:Green

Light Green
023gfd

Name: Light Green
Code: 023gfd

Why inner class?

For the grouping of two or more classes. Suppose we have two classes remote and battery. Every remote needs a battery but battery without remote won’t be used. So, we make the Battery an inner class to the Remote. It helps us to save code.



With the help of the inner class or nested class, we can hide the inner class from the outside world. Hence, Hiding the code is another good feature of the inner class.

By using the inner class, we can easily understand the classes because the classes are closely related. We do not need to search for classes in the whole code, they all are almost together.

Though inner or nested classes are not used widely in Python it will be a better feature to implement code because it is straight forward to organize when we use inner class or nested class.

Syntax:

# create NameOfOuterClass class
class NameOfOuterClass:

  # Constructor method of outer class
  def __init__(self):  

    self.NameOfVariable = Value

    # create Inner class object
    self.NameOfInnerClassObject = self.NameOfInnerClass() 
 
  # create a NameOfInnerClass class
  class NameOfInnerClass:  
     # Constructor method of inner class
    def __init__(self): 
      self.NameOfVariable = Value

# create object of outer class
outer = NameOfOuterClass() 

Types of inner classes –

  • Multiple inner class
  • Multilevel inner class

Multiple inner class

The class contains one or more inner classes is known as multiple inner class. We can have multiple inner class in a class, it is easy to implement multiple inner class.

Example of multiple inner class –

filter_none

edit
close

play_arrow

link
brightness_4
code

# create outer class
class Doctors:  
  def __init__(self):
     self.name = 'Doctor'
     self.den = self.Dentist()
     self.car = self.Cardiologist()
   
  def show(self):
    print('In outer class')
    print('Name:', self.name)
  
   # create a 1st Inner class
   class Dentist:   
      def __init__(self):
         self.name = 'Dr. Savita'
         self.degree = 'BDS'
      def display(self):
         print("Name:", self.name)
         print("Degree:", self.degree)
  
   # create a 2nd Inner class
   class Cardiologist:
      def __init__(self):
         self.name = 'Dr. Amit'
         self.degree = 'DM'
     def display(self):
         print("Name:", self.name)
         print("Degree:", self.degree)
  
# create a object
# of outer class
outer = Doctors()
outer.show()
  
# create a object
# of 1st inner class
d1 = outer.den
  
# create a object
# of 2nd inner class
d2 = outer.car
print()
d1.display()
print()
d2.display()

chevron_right


Output:

In outer class
Name: Doctor

In inner class 1
Name: Dr. Savita
Degree: BDS

In inner class 2
Name: Dr. Amit
Degree: DM 

Multilevel inner class

The class contains inner class and that inner class again contains another inner class, this hierarchy is known as multilevel inner class.

Example of multilevel inner class –

filter_none

edit
close

play_arrow

link
brightness_4
code

# create a outer class
class Geeksforgeeks:  
    
  def __init__(gfg):
     # create a inner class object
     self.inner = self.Inner()
  
  def show(gfg):
     print('This is an outer class')
  
  # create a 1st inner class 
  class Inner:
   
   def __init__(self):
     # create a inner class of inner class object
     self.innerclassofinner = self.Innerclassofinner()
    
   def show(self):
    print('This is the inner class')
    
   # create a inner class of inner
   class Innerclassofinner:
           
      def show(self):
         print()
                 
      def show(self):
         print('This is an inner class of inner class')
  
# create a outer class object 
# i.e.Geeksforgeeks class object
outer = Geeksforgeeks()
outer.show()
print()
  
# create a inner class object 
gfg1 = outer.inner
gfg1.show()
print()
  
# create a inner class of inner class object
gfg2 = outer.inner.innerclassofinner
gfg2.show()

chevron_right


Output:

This is an outer class

This is an inner class

This is an inner class of inner class means multilevel inner class




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :

1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.