Instance methods in Python - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When we use instance methods in Python, we want to know how the time it takes to run changes as the input grows.
We ask: How does calling an instance method affect the program's speed when the input size changes?
Analyze the time complexity of the following code snippet.
class Counter:
def __init__(self, numbers):
self.numbers = numbers
def total(self):
total = 0
for num in self.numbers:
total += num
return total
c = Counter([1, 2, 3, 4, 5])
print(c.total())
This code defines a class with an instance method that adds up all numbers in a list.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through the list of numbers inside the
totalmethod. - How many times: Once for each number in the list.
As the list gets longer, the method has to add more numbers, so it takes more time.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 additions |
| 100 | About 100 additions |
| 1000 | About 1000 additions |
Pattern observation: The time grows directly with the number of items; double the items, double the work.
Time Complexity: O(n)
This means the time to run the method grows in a straight line with the size of the list.
[X] Wrong: "Calling an instance method always takes the same time no matter the input size."
[OK] Correct: The method's work depends on the data it processes. If it loops over a list, more items mean more work and more time.
Understanding how instance methods scale with input helps you explain your code's efficiency clearly and confidently in real projects and interviews.
"What if the total method used recursion instead of a loop? How would the time complexity change?"
Practice
self parameter in an instance method?Solution
Step 1: Understand what
selfrepresentsselfis a reference to the current object that calls the method, allowing access to its attributes and other methods.Step 2: Differentiate from other options
Static methods, object creation, and return values are unrelated concepts, which are not the role ofself.Final Answer:
It refers to the specific object calling the method. -> Option AQuick Check:
self= current object [OK]
- Thinking self is a keyword, not a parameter
- Confusing self with class or static methods
- Assuming self is optional in instance methods
Solution
Step 1: Recall instance method syntax
Instance methods must haveselfas the first parameter to access the object's data.Step 2: Check each option
def method_name(): missesself, def method_name(cls): usesclswhich is for class methods, and def method_name(*args): uses a generic parameter which is not standard for instance methods.Final Answer:
def method_name(self): -> Option DQuick Check:
Instance method = first param self [OK]
- Omitting self in method definition
- Using cls instead of self for instance methods
- Using no parameters or *args incorrectly
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
return f"{self.name} says Woof!"
my_dog = Dog('Buddy')
print(my_dog.bark())Solution
Step 1: Understand object creation and method call
The objectmy_dogis created with name 'Buddy'. Callingbark()usesself.namewhich is 'Buddy'.Step 2: Evaluate the return value
The method returns the string "Buddy says Woof!" which is printed.Final Answer:
Buddy says Woof! -> Option BQuick Check:
Method uses self.name = Buddy [OK]
- Ignoring self and expecting just 'Woof!'
- Confusing variable name with object name
- Assuming method returns nothing
class Car:
def __init__(self, model):
self.model = model
def show_model():
print(f"Model: {self.model}")
car = Car('Tesla')
car.show_model()Solution
Step 1: Check method definition
The methodshow_modelis missing theselfparameter, so it cannot access instance attributes.Step 2: Understand the error cause
Callingcar.show_model()passes the object automatically, but method lacksselfto receive it, causing a TypeError.Final Answer:
Missing self parameter in show_model method -> Option CQuick Check:
Instance methods need self parameter [OK]
- Forgetting self in method definition
- Trying to access self without parameter
- Confusing class and instance methods
Counter that counts how many times its method increment is called on each object separately. Which code correctly implements this behavior?Solution
Step 1: Understand instance vs class variables
Instance variables (self.count) ensure each object tracks its own count separately. Methods must acceptselfand updateself.count.Step 2: Eliminate incorrect approaches
Class variables are shared across all instances. Missingselfparameter in methods causes TypeError. Updating a local variable doesn't affect the instance attribute.Final Answer:
class Counter: def __init__(self): self.count = 0 def increment(self): self.count += 1 def get_count(self): return self.count -> Option AQuick Check:
Instance variables + self = separate counts [OK]
- Using class variables for per-object data
- Forgetting self in method parameters
- Incrementing local variables instead of instance attributes
