Polymorphism through inheritance in Python - Time & Space Complexity
Let's see how the time taken by a program changes when using polymorphism through inheritance.
We want to know how the program's steps grow as we use more objects with inherited behaviors.
Analyze the time complexity of the following code snippet.
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
print("Woof")
class Cat(Animal):
def speak(self):
print("Meow")
animals = [Dog(), Cat(), Dog()]
for animal in animals:
animal.speak()
This code creates a list of animals and calls their speak method, which behaves differently depending on the animal type.
- Primary operation: Looping through the list of animals and calling their speak method.
- How many times: Once for each animal in the list.
Each animal in the list causes one speak call, so the work grows as the list grows.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 speak calls |
| 100 | 100 speak calls |
| 1000 | 1000 speak calls |
Pattern observation: The number of operations grows directly with the number of animals.
Time Complexity: O(n)
This means the time grows in a straight line as you add more animals to the list.
[X] Wrong: "Polymorphism makes the program slower because it adds extra steps for each method call."
[OK] Correct: The extra steps are very small and do not change how the total time grows with more animals; the main factor is still how many animals you have.
Understanding how polymorphism affects time helps you explain your code's behavior clearly and shows you know how programs scale with more data.
"What if we added a nested loop inside each speak method? How would the time complexity change?"