Bird
Raised Fist0
Pythonprogramming~10 mins

Arithmetic operator overloading in Python - Step-by-Step Execution

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
Concept Flow - Arithmetic operator overloading
Create object with value
Use operator like +, -, *
Call special method (__add__, __sub__, __mul__)
Perform custom operation
Return new object or value
Use result in expression
When you use operators like + or -, Python calls special methods in your class to decide what to do.
Execution Sample
Python
class Number:
    def __init__(self, value):
        self.value = value
    def __add__(self, other):
        return Number(self.value + other.value)

n1 = Number(3)
n2 = Number(4)
n3 = n1 + n2
print(n3.value)
This code adds two Number objects by overloading the + operator and prints the result.
Execution Table
StepActionEvaluationResult
1Create n1 with value 3n1.value = 3n1 = Number(3)
2Create n2 with value 4n2.value = 4n2 = Number(4)
3Evaluate n1 + n2Calls n1.__add__(n2)Returns Number with value 7
4Assign result to n3n3.value = 7n3 = Number(7)
5Print n3.valueOutput is 77
💡 Finished printing result, program ends
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
n1.valueundefined33333
n2.valueundefinedundefined4444
n3.valueundefinedundefinedundefinedundefined77
Key Moments - 3 Insights
Why does n1 + n2 call the __add__ method?
Because Python uses the __add__ method to define what + means for objects, as shown in step 3 of the execution_table.
What type is the result of n1 + n2?
The result is a new Number object with value 7, not just a number, as seen in step 3 and 4.
Why do we access n3.value to print the number?
Because n3 is a Number object, and the actual number is stored in its value attribute, shown in step 5.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of n3.value after step 4?
A3
B4
C7
Dundefined
💡 Hint
Check the 'After Step 4' column for n3.value in variable_tracker.
At which step does Python call the __add__ method?
AStep 1
BStep 3
CStep 5
DStep 2
💡 Hint
Look at the 'Action' column in execution_table where n1 + n2 is evaluated.
If __add__ returned self.value + other.value instead of a Number, what would change?
An3 would be an int, not a Number object
Bn1 and n2 would change values
Cn3 would be a Number object
DThe program would crash
💡 Hint
Think about the return type in step 3 of execution_table.
Concept Snapshot
Arithmetic operator overloading lets you define how operators like + work on your objects.
Use special methods like __add__(self, other) to customize behavior.
Return a new object or value from these methods.
This lets you write expressions like obj1 + obj2 naturally.
Python calls these methods automatically when operators are used.
Full Transcript
This lesson shows how Python lets you change what operators like + do when used with your own objects. When you write n1 + n2, Python calls the __add__ method inside your class. This method can do anything you want, like adding values inside the objects and returning a new object. We traced a simple example where two Number objects are added. Step by step, we saw how objects are created, how __add__ is called, and how the result is stored and printed. Key points include understanding that operators call special methods, the result can be a new object, and you access the stored value to see the number. The quizzes check your understanding of these steps and what changes if the method returns a different type.

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__)