Bird
Raised Fist0
Pythonprogramming~10 mins

Arithmetic operator overloading in Python - Interactive Code Practice

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to overload the addition operator for the class.

Python
class Number:
    def __init__(self, value):
        self.value = value

    def __add__(self, other):
        return Number(self.value [1] other.value)

num1 = Number(5)
num2 = Number(3)
result = num1 + num2
print(result.value)
Drag options to blanks, or click blank then click option'
A-
B+
C*
D/
Attempts:
3 left
💡 Hint
Common Mistakes
Using a different operator like '-' or '*' instead of '+'
Forgetting to access other.value
Returning a raw number instead of a new Number instance
2fill in blank
medium

Complete the code to overload the multiplication operator for the class.

Python
class Number:
    def __init__(self, value):
        self.value = value

    def __mul__(self, other):
        return Number(self.value [1] other.value)

num1 = Number(4)
num2 = Number(6)
result = num1 * num2
print(result.value)
Drag options to blanks, or click blank then click option'
A/
B-
C*
D+
Attempts:
3 left
💡 Hint
Common Mistakes
Using '+' or '-' instead of '*'
Not returning a new Number instance
Accessing other directly instead of other.value
3fill in blank
hard

Fix the error in the code to correctly overload the subtraction operator.

Python
class Number:
    def __init__(self, value):
        self.value = value

    def __sub__(self, other):
        return Number(self.value [1] other.value)

num1 = Number(10)
num2 = Number(4)
result = num1 - num2
print(result.value)
Drag options to blanks, or click blank then click option'
A+
B/
C*
D-
Attempts:
3 left
💡 Hint
Common Mistakes
Using '+' instead of '-'
Returning a raw number instead of a Number instance
Not accessing other.value
4fill in blank
hard

Fill both blanks to overload the true division operator and return a float value.

Python
class Number:
    def __init__(self, value):
        self.value = value

    def __truediv__(self, other):
        return Number(self.value [1] other.value)

num1 = Number(9)
num2 = Number(2)
result = num1 [2] num2
print(result.value)
Drag options to blanks, or click blank then click option'
A/
B*
C-
D+
Attempts:
3 left
💡 Hint
Common Mistakes
Using '*' or '+' instead of '/'
Using integer division operator '//' instead of '/'
Not returning a new Number instance
5fill in blank
hard

Fill all three blanks to overload addition, subtraction, and multiplication operators correctly.

Python
class Number:
    def __init__(self, value):
        self.value = value

    def __add__(self, other):
        return Number(self.value [1] other.value)

    def __sub__(self, other):
        return Number(self.value [2] other.value)

    def __mul__(self, other):
        return Number(self.value [3] other.value)

num1 = Number(7)
num2 = Number(3)
print((num1 + num2).value)
print((num1 - num2).value)
print((num1 * num2).value)
Drag options to blanks, or click blank then click option'
A+
B-
C*
D/
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing up operators between methods
Using division '/' in any of these methods
Not returning a new Number instance

Practice

(1/5)
1. What does arithmetic operator overloading allow you to do in Python?
easy
A. Define how operators like +, -, * work for your custom objects
B. Change the behavior of built-in data types like int and str
C. Create new arithmetic operators not available in Python
D. Automatically optimize arithmetic operations for speed

Solution

  1. Step 1: Understand operator overloading concept

    Operator overloading lets you tell Python how to use operators like + or * with your own objects.
  2. Step 2: Identify what can be customized

    You can define special methods like __add__ to customize + for your class instances.
  3. Final Answer:

    Define how operators like +, -, * work for your custom objects -> Option A
  4. Quick Check:

    Operator overloading = custom operator behavior [OK]
Hint: Think: 'How do I make + work for my objects?' [OK]
Common Mistakes:
  • Confusing operator overloading with creating new operators
  • Thinking it changes built-in types behavior
  • Assuming it improves performance automatically
2. Which special method should you define to overload the addition operator (+) in a Python class?
easy
A. __append__
B. __plus__
C. __sum__
D. __add__

Solution

  1. Step 1: Recall Python special method names for operators

    Python uses __add__ to overload the + operator in classes.
  2. Step 2: Check other options

    __plus__, __sum__, and __append__ are not valid special methods for + operator.
  3. Final Answer:

    __add__ -> Option D
  4. Quick Check:

    + operator method = __add__ [OK]
Hint: Remember: add = __add__, subtract = __sub__ [OK]
Common Mistakes:
  • Using __plus__ instead of __add__
  • Confusing __sum__ with sum() function
  • Using __append__ which is for lists
3. What will be the output of this code?
class Number:
    def __init__(self, value):
        self.value = value
    def __add__(self, other):
        return Number(self.value + other.value)
    def __str__(self):
        return str(self.value)

n1 = Number(5)
n2 = Number(10)
print(n1 + n2)
medium
A. TypeError
B. Number object at some memory address
C. 15
D. 5 10

Solution

  1. Step 1: Understand __add__ method behavior

    Adding n1 + n2 calls __add__, which returns a new Number with value 5 + 10 = 15.
  2. Step 2: Understand __str__ method effect on print

    print calls __str__ on the result, which returns '15' as string.
  3. Final Answer:

    15 -> Option C
  4. Quick Check:

    Custom + returns Number(15), printed as '15' [OK]
Hint: Check __add__ return and __str__ print output [OK]
Common Mistakes:
  • Expecting print to show object memory address
  • Forgetting __str__ method for printing
  • Thinking it raises TypeError without __add__
4. Find the error in this code that tries to overload the multiplication operator (*) for a class:
class Multiplier:
    def __init__(self, num):
        self.num = num
    def __mul__(self, other):
        return self.num * other.num

m1 = Multiplier(3)
m2 = Multiplier(4)
print(m1 * m2)
medium
A. The __mul__ method should return a Multiplier object, not an int
B. The __init__ method is missing a return statement
C. The print statement should use str(m1 * m2)
D. The __mul__ method should be named __multiply__

Solution

  1. Step 1: Check __mul__ return type

    __mul__ returns an int (self.num * other.num), but operator overloading usually returns an object of the class.
  2. Step 2: Understand why returning int is a problem

    Returning int means further chained operations on Multiplier objects will fail or behave unexpectedly.
  3. Final Answer:

    The __mul__ method should return a Multiplier object, not an int -> Option A
  4. Quick Check:

    __mul__ must return class instance for chaining [OK]
Hint: Return class instance in operator methods, not raw values [OK]
Common Mistakes:
  • Returning raw int instead of class instance
  • Thinking __init__ needs return
  • Misnaming __mul__ method
5. You want to create a class Vector that supports adding vectors and multiplying by a number. Which methods should you define to support v1 + v2 and v1 * 3 where v1 and v2 are Vector objects?
hard
A. __add__ for vector + vector, __rmul__ for number * vector
B. __add__ for vector + vector, __mul__ for vector * number
C. __add__ for vector + vector, __mul__ for number * vector
D. __radd__ for vector + vector, __mul__ for vector * number

Solution

  1. Step 1: Identify method for vector + vector

    __add__ handles adding two Vector objects like v1 + v2.
  2. Step 2: Identify method for vector * number

    __mul__ handles multiplying Vector by a number like v1 * 3.
  3. Final Answer:

    __add__ for vector + vector, __mul__ for vector * number -> Option B
  4. Quick Check:

    Use __add__ and __mul__ for these operations [OK]
Hint: Use __add__ for +, __mul__ for * with your class [OK]
Common Mistakes:
  • Confusing __rmul__ with __mul__
  • Using __radd__ instead of __add__ for vector + vector
  • Assuming number * vector uses __mul__ (it uses __rmul__)