Method overriding behavior in Python - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
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?
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 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.
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 |
|---|---|
| 10 | 10 object creations and 10 method calls |
| 100 | 100 object creations and 100 method calls |
| 1000 | 1000 object creations and 1000 method calls |
Pattern observation: The total work grows directly with n, doubling n doubles the work.
Time Complexity: O(n)
This means the time to run the code grows in a straight line as the number of calls increases.
[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.
Understanding how method calls behave when overridden helps you explain object-oriented code clearly and shows you know how programs scale with input size.
"What if we created the object once before the loop and called the method n times? How would the time complexity change?"
Practice
Solution
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.Step 2: Identify what overriding changes
The child class method replaces the parent's method behavior when called on the child instance.Final Answer:
Change the behavior of a method inherited from the parent class -> Option CQuick Check:
Method overriding = change inherited method behavior [OK]
- Thinking overriding creates a new method with a different name
- Believing overriding disables parent method everywhere
- Assuming parent method is called automatically without super()
greet in a child class?Solution
Step 1: Match method name exactly
Overriding requires the child method to have the same name as the parent method, here 'greet'.Step 2: Check method signature
The method must include 'self' as the first parameter to be a proper instance method.Final Answer:
def greet(self):\n print('Hello from child') -> Option BQuick Check:
Same name and self parameter = correct override [OK]
- Changing method name instead of overriding
- Omitting self parameter in method definition
- Adding extra parameters that don't match parent method
class Parent:
def greet(self):
print('Hello from Parent')
class Child(Parent):
def greet(self):
print('Hello from Child')
obj = Child()
obj.greet()Solution
Step 1: Identify method overriding
The Child class defines its own greet method, overriding Parent's greet.Step 2: Determine which method is called
Calling obj.greet() on a Child instance calls the Child's greet method, printing 'Hello from Child'.Final Answer:
Hello from Child -> Option DQuick Check:
Child method overrides Parent method = 'Hello from Child' [OK]
- Expecting both parent and child messages to print
- Thinking parent method runs instead of child
- Assuming error due to method name conflict
class Parent:
def show(self):
print('Parent show')
class Child(Parent):
def show():
print('Child show')
obj = Child()
obj.show()Solution
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.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.Final Answer:
Missing self parameter in Child's show method -> Option AQuick Check:
Instance methods must have self parameter [OK]
- Ignoring missing self parameter
- Thinking method overriding is not allowed
- Believing calling method differently fixes error
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()Solution
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.Step 2: Follow the print statements
First, 'Hello from Parent' is printed, then 'Hello from Child' is printed after.Final Answer:
Hello from Parent\nHello from Child -> Option AQuick Check:
super() calls parent method before child code [OK]
- Expecting only child's message to print
- Thinking super() causes error without arguments
- Ignoring order of print statements
