Can you override in python?

View Discussion

Improve Article

Save Article

  • Read
  • Discuss
  • View Discussion

    Improve Article

    Save Article

    Prerequisite: Inheritance in Python

    Method overriding is an ability of any object-oriented programming language that allows a subclass or child class to provide a specific implementation of a method that is already provided by one of its super-classes or parent classes. When a method in a subclass has the same name, same parameters or signature and same return type[or sub-type] as a method in its super-class, then the method in the subclass is said to override the method in the super-class.

    The version of a method that is executed will be determined by the object that is used to invoke it. If an object of a parent class is used to invoke the method, then the version in the parent class will be executed, but if an object of the subclass is used to invoke the method, then the version in the child class will be executed. In other words, it is the type of the object being referred to [not the type of the reference variable] that determines which version of an overridden method will be executed.

    Example:

    class Parent[]:

        def __init__[self]:

            self.value = "Inside Parent"

        def show[self]:

            print[self.value]

    class Child[Parent]:

        def __init__[self]:

            self.value = "Inside Child"

        def show[self]:

            print[self.value]

    obj1 = Parent[]

    obj2 = Child[]

    obj1.show[]

    obj2.show[]

    Output:

    Inside Parent
    Inside Child
    

    Method overriding with multiple and multilevel inheritance

    1. Multiple Inheritance: When a class is derived from more than one base class it is called multiple Inheritance.

      Example: Let’s consider an example where we want to override a method of one parent class only. Below is the implementation.

      class Parent1[]:

          def show[self]:

              print["Inside Parent1"]

      class Parent2[]:

          def display[self]:

              print["Inside Parent2"]

      class Child[Parent1, Parent2]:

          def show[self]:

              print["Inside Child"]

      obj = Child[]

      obj.show[]

      obj.display[]

      Output:

      Inside Child
      Inside Parent2
      
    2. Multilevel Inheritance: When we have a child and grandchild relationship.

      Example: Let’s consider an example where we want to override only one method of one of its parent classes. Below is the implementation.

      class Parent[]: 

          def display[self]:

              print["Inside Parent"]

      class Child[Parent]: 

          def show[self]:

              print["Inside Child"]

      class GrandChild[Child]: 

          def show[self]:

              print["Inside GrandChild"]         

      g = GrandChild[]   

      g.show[]

      g.display[]

      Output:

      Inside GrandChild
      Inside Parent
      

    Calling the Parent’s method within the overridden method

    Parent class methods can also be called within the overridden methods. This can generally be achieved by two ways.

    • Using Classname: Parent’s class methods can be called by using the Parent classname.method inside the overridden method.

      Example:

      class Parent[]:

          def show[self]:

              print["Inside Parent"]

      class Child[Parent]:

          def show[self]:

              Parent.show[self]

              print["Inside Child"]

      obj = Child[]

      obj.show[]

      Output:

      Inside Parent
      Inside Child
      
    • Using Super[]: Python super[] function provides us the facility to refer to the parent class explicitly. It is basically useful where we have to call superclass functions. It returns the proxy object that allows us to refer parent class by ‘super’.

      Example 1:

      class Parent[]:

          def show[self]:

              print["Inside Parent"]

      class Child[Parent]:

          def show[self]:

              super[].show[]

              print["Inside Child"]

      obj = Child[]

      obj.show[]

      Output:

      Inside Parent
      Inside Child
      

      Example 2:

      class GFG1: 

          def __init__[self]: 

              print['HEY !!!!!! GfG I am initialised[Class GEG1]'

          def sub_GFG[self, b]: 

              print['Printing from class GFG1:', b] 

      class GFG2[GFG1]: 

          def __init__[self]: 

              print['HEY !!!!!! GfG I am initialised[Class GEG2]'

              super[].__init__[] 

          def sub_GFG[self, b]: 

              print['Printing from class GFG2:', b] 

              super[].sub_GFG[b + 1

      class GFG3[GFG2]: 

          def __init__[self]: 

              print['HEY !!!!!! GfG I am initialised[Class GEG3]'

              super[].__init__[] 

          def sub_GFG[self, b]: 

              print['Printing from class GFG3:', b] 

              super[].sub_GFG[b + 1

      if __name__ == '__main__'

          gfg = GFG3[] 

          gfg.sub_GFG[10]

      Output:

      HEY !!!!!! GfG I am initialised[Class GEG3]
      HEY !!!!!! GfG I am initialised[Class GEG2]
      HEY !!!!!! GfG I am initialised[Class GEG1]
      Printing from class GFG3: 10
      Printing from class GFG2: 11
      Printing from class GFG1: 12
      

    What is method override in Python?

    Method overriding is a concept of object oriented programming that allows us to change the implementation of a function in the child class that is defined in the parent class. It is the ability of a child class to change the implementation of any method which is already provided by one of its parent class[ancestors].

    Is overloading and overriding possible in Python?

    Note: Python does not support method overloading. We may overload the methods but can only use the latest defined method.

    Why We Use overriding in Python?

    Method Overriding allows us to change the implementation of a function in the child class which is defined in the parent class.

    Can you override any method?

    A method declared final cannot be overridden. A method declared static cannot be overridden but can be re-declared. If a method cannot be inherited, then it cannot be overridden. A subclass within the same package as the instance's superclass can override any superclass method that is not declared private or final.

    Chủ Đề