Bird
Raised Fist0
Pythonprogramming~5 mins

Method overriding behavior in Python - Time & Space Complexity

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Time Complexity: Method overriding behavior
O(n)
Understanding Time Complexity

We want to understand how the time it takes to run a program changes when we use method overriding in Python.

Specifically, we ask: How does calling an overridden method affect the program's speed as the number of calls grows?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.

class Parent:
    def greet(self):
        print("Hello from Parent")

class Child(Parent):
    def greet(self):
        print("Hello from Child")

n = 10  # Example value for n
for i in range(n):
    obj = Child()
    obj.greet()

This code creates a Child object n times and calls its overridden greet method each time.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Creating an object and calling the overridden greet method.
  • How many times: This happens once for each iteration in the loop, so n times.
How Execution Grows With Input

Each time we increase n, the number of times we create an object and call greet grows the same way.

Input Size (n)Approx. Operations
1010 object creations and 10 method calls
100100 object creations and 100 method calls
10001000 object creations and 1000 method calls

Pattern observation: The total work grows directly with n, doubling n doubles the work.

Final Time Complexity

Time Complexity: O(n)

This means the time to run the code grows in a straight line as the number of calls increases.

Common Mistake

[X] Wrong: "Method overriding makes the program slower by adding extra hidden steps each time a method is called."

[OK] Correct: Overriding just changes which method runs, but calling a method still takes about the same time as usual. The main cost is how many times you call it, not that it is overridden.

Interview Connect

Understanding how method calls behave when overridden helps you explain object-oriented code clearly and shows you know how programs scale with input size.

Self-Check

"What if we created the object once before the loop and called the method n times? How would the time complexity change?"

Practice

(1/5)
1. What does method overriding allow a child class to do in Python?
easy
A. Prevent the parent class method from being used anywhere
B. Create a new method with a different name
C. Change the behavior of a method inherited from the parent class
D. Automatically call the parent class method without code

Solution

  1. Step 1: Understand method overriding concept

    Method overriding means the child class provides its own version of a method that exists in the parent class.
  2. Step 2: Identify what overriding changes

    The child class method replaces the parent's method behavior when called on the child instance.
  3. Final Answer:

    Change the behavior of a method inherited from the parent class -> Option C
  4. Quick Check:

    Method overriding = change inherited method behavior [OK]
Hint: Overriding means child changes parent's method behavior [OK]
Common Mistakes:
  • Thinking overriding creates a new method with a different name
  • Believing overriding disables parent method everywhere
  • Assuming parent method is called automatically without super()
2. Which of the following is the correct way to override a method named greet in a child class?
easy
A. def greet(self, extra):\n print('Hello from child')
B. def greet(self):\n print('Hello from child')
C. def greet_child(self):\n print('Hello from child')
D. def greet():\n print('Hello from child')

Solution

  1. Step 1: Match method name exactly

    Overriding requires the child method to have the same name as the parent method, here 'greet'.
  2. Step 2: Check method signature

    The method must include 'self' as the first parameter to be a proper instance method.
  3. Final Answer:

    def greet(self):\n print('Hello from child') -> Option B
  4. Quick Check:

    Same name and self parameter = correct override [OK]
Hint: Override by matching method name and self parameter [OK]
Common Mistakes:
  • Changing method name instead of overriding
  • Omitting self parameter in method definition
  • Adding extra parameters that don't match parent method
3. What will be the output of this code?
class Parent:
    def greet(self):
        print('Hello from Parent')

class Child(Parent):
    def greet(self):
        print('Hello from Child')

obj = Child()
obj.greet()
medium
A. Hello from Parent
B. Error: greet method not found
C. Hello from Parent\nHello from Child
D. Hello from Child

Solution

  1. Step 1: Identify method overriding

    The Child class defines its own greet method, overriding Parent's greet.
  2. Step 2: Determine which method is called

    Calling obj.greet() on a Child instance calls the Child's greet method, printing 'Hello from Child'.
  3. Final Answer:

    Hello from Child -> Option D
  4. Quick Check:

    Child method overrides Parent method = 'Hello from Child' [OK]
Hint: Child method runs when overridden, not parent's [OK]
Common Mistakes:
  • Expecting both parent and child messages to print
  • Thinking parent method runs instead of child
  • Assuming error due to method name conflict
4. Find the error in this code that tries to override a method:
class Parent:
    def show(self):
        print('Parent show')

class Child(Parent):
    def show():
        print('Child show')

obj = Child()
obj.show()
medium
A. Missing self parameter in Child's show method
B. Parent class method show is private
C. Child class should not override show method
D. obj.show() should be called as Child.show(obj)

Solution

  1. Step 1: Check method signature in Child class

    The Child's show method is missing the 'self' parameter, so it is not a proper instance method.
  2. Step 2: Understand impact of missing self

    Calling obj.show() will cause a TypeError because Python expects the first argument (self) but none is defined.
  3. Final Answer:

    Missing self parameter in Child's show method -> Option A
  4. Quick Check:

    Instance methods must have self parameter [OK]
Hint: Instance methods always need self as first parameter [OK]
Common Mistakes:
  • Ignoring missing self parameter
  • Thinking method overriding is not allowed
  • Believing calling method differently fixes error
5. Given this code, what will be the output?
class Parent:
    def greet(self):
        print('Hello from Parent')

class Child(Parent):
    def greet(self):
        super().greet()
        print('Hello from Child')

obj = Child()
obj.greet()
hard
A. Hello from Parent\nHello from Child
B. Hello from Child
C. Hello from Parent
D. Error: super() used incorrectly

Solution

  1. Step 1: Understand super() call in Child's greet

    The Child's greet method calls super().greet(), which runs the Parent's greet method first.
  2. Step 2: Follow the print statements

    First, 'Hello from Parent' is printed, then 'Hello from Child' is printed after.
  3. Final Answer:

    Hello from Parent\nHello from Child -> Option A
  4. Quick Check:

    super() calls parent method before child code [OK]
Hint: super() runs parent method before child code [OK]
Common Mistakes:
  • Expecting only child's message to print
  • Thinking super() causes error without arguments
  • Ignoring order of print statements