Bird
Raised Fist0
Pythonprogramming~20 mins

Purpose of magic methods in Python - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
Magic Methods Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of this code using __str__ magic method?
Consider the following Python class with a magic method. What will be printed when the code runs?
Python
class Book:
    def __init__(self, title):
        self.title = title
    def __str__(self):
        return f"Book title: {self.title}"

b = Book("Python Basics")
print(b)
A<__main__.Book object at 0x...>
BBook title: Python Basics
CPython Basics
DError: __str__ method missing
Attempts:
2 left
💡 Hint
The __str__ method controls what print shows for an object.
Predict Output
intermediate
2:00remaining
What does this code print using __len__ magic method?
Look at this class with a __len__ method. What will print when len(obj) is called?
Python
class Basket:
    def __init__(self, items):
        self.items = items
    def __len__(self):
        return len(self.items)

obj = Basket(['apple', 'banana', 'cherry'])
print(len(obj))
A0
BError: __len__ method not found
C['apple', 'banana', 'cherry']
D3
Attempts:
2 left
💡 Hint
The __len__ method tells Python how to get the length of an object.
🧠 Conceptual
advanced
2:00remaining
Why use magic methods like __add__ in classes?
What is the main purpose of defining magic methods such as __add__ in a Python class?
ATo prevent the class from being instantiated
BTo make the class run faster
CTo allow objects of the class to use operators like + in a custom way
DTo automatically generate documentation for the class
Attempts:
2 left
💡 Hint
Think about what happens when you use + between two objects.
Predict Output
advanced
2:00remaining
What error does this code raise without __eq__ magic method?
What happens when you compare two objects of this class without defining __eq__?
Python
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

p1 = Point(1, 2)
p2 = Point(1, 2)
print(p1 == p2)
AFalse
BTrue
CTypeError
DSyntaxError
Attempts:
2 left
💡 Hint
Without __eq__, == compares object identity, not content.
🧠 Conceptual
expert
2:00remaining
Which magic method allows an object to be used as a context manager?
To use an object with the 'with' statement, which magic methods must the class implement?
A__enter__ and __exit__
B__init__ and __del__
C__call__ and __repr__
D__str__ and __len__
Attempts:
2 left
💡 Hint
The 'with' statement needs special methods to start and end the block.

Practice

(1/5)
1. What is the main purpose of magic methods in Python?
easy
A. To create graphical user interfaces
B. To customize how objects behave with built-in Python features
C. To manage file input and output
D. To write comments in the code

Solution

  1. Step 1: Understand what magic methods are

    Magic methods are special functions with double underscores that let you change how objects act.
  2. Step 2: Identify their main use

    They allow objects to work with Python features like printing, adding, or getting length.
  3. Final Answer:

    To customize how objects behave with built-in Python features -> Option B
  4. Quick Check:

    Magic methods = customize object behavior [OK]
Hint: Magic methods start and end with double underscores [OK]
Common Mistakes:
  • Thinking magic methods create GUIs
  • Confusing magic methods with file handling
  • Believing magic methods are for comments
2. Which of the following is the correct syntax for a magic method that initializes an object?
easy
A. def __init__(self):
B. def __initialize__(self):
C. def init__(self):
D. def _init_(self):

Solution

  1. Step 1: Recall the correct magic method name for initialization

    The magic method to initialize an object is spelled with double underscores before and after 'init'.
  2. Step 2: Check each option's syntax

    Only 'def __init__(self):' has the correct double underscores and spelling.
  3. Final Answer:

    def __init__(self): -> Option A
  4. Quick Check:

    Initialization method = __init__ [OK]
Hint: Magic methods always have double underscores on both sides [OK]
Common Mistakes:
  • Using single underscores instead of double
  • Misspelling the method name
  • Adding extra words like 'initialize'
3. What will be the output of this code?
class Number:
    def __init__(self, value):
        self.value = value
    def __add__(self, other):
        return self.value + other.value

num1 = Number(5)
num2 = Number(10)
print(num1 + num2)
medium
A. 510
B. TypeError
C. 15
D. None

Solution

  1. Step 1: Understand the __add__ magic method

    The __add__ method defines how the + operator works for Number objects by adding their 'value' attributes.
  2. Step 2: Calculate the addition

    num1.value is 5 and num2.value is 10, so 5 + 10 = 15.
  3. Final Answer:

    15 -> Option C
  4. Quick Check:

    __add__ adds values = 15 [OK]
Hint: __add__ defines + behavior for objects [OK]
Common Mistakes:
  • Expecting string concatenation '510'
  • Thinking it causes a TypeError
  • Assuming it returns None
4. Identify the error in this code snippet:
class Person:
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return name

p = Person('Alice')
print(p)
medium
A. Using undefined variable 'name' in __str__
B. No error, code runs fine
C. Incorrect method name __str__
D. Missing return statement in __str__

Solution

  1. Step 1: Check the __str__ method's return value

    The method returns 'name', but 'name' is not defined inside __str__; it should use self.name.
  2. Step 2: Understand variable scope

    Since 'name' is undefined in __str__, this causes a NameError at runtime.
  3. Final Answer:

    Using undefined variable 'name' in __str__ -> Option A
  4. Quick Check:

    Use self.name inside methods [OK]
Hint: Use self.variable to access attributes inside methods [OK]
Common Mistakes:
  • Forgetting self. before attribute names
  • Thinking __str__ is misspelled
  • Assuming no error occurs
5. You want to create a class where the length of an object returns the number of items it holds. Which magic method should you implement and how?
hard
A. Implement __count__(self) to return the count of items
B. Implement __length__(self) to return the count of items
C. Implement __size__(self) to return the count of items
D. Implement __len__(self) to return the count of items

Solution

  1. Step 1: Identify the magic method for length

    The built-in function len() calls the __len__ magic method on objects.
  2. Step 2: Confirm correct method name and purpose

    Only __len__ is the correct magic method to return the number of items.
  3. Final Answer:

    Implement __len__(self) to return the count of items -> Option D
  4. Quick Check:

    len() calls __len__ [OK]
Hint: len() uses __len__ method inside objects [OK]
Common Mistakes:
  • Using non-existent magic methods like __count__
  • Confusing method names with similar words
  • Not implementing any magic method