Operator Overloading
Master operator overloading to make your classes behave like built-in types. Learn the techniques used by NumPy, PyTorch, Pandas, and SQLAlchemy to create intuitive, powerful APIs through custom operator behaviors.
Learn Python, JavaScript, Java and more with free interactive lessons, real projects and AI-powered help. Beginner-friendly.
Part of the free Python course at LearnCodingFast — hands-on lessons with examples you run in your browser, plus practice exercises and a quick quiz.
🔥 Operator Overloading & Custom Behaviours
Operator overloading lets your classes behave like built-in types:
If you want to build professional-grade classes, operator overloading is mandatory.
⚙️ 1. Why Operator Overloading Exists
Python allows classes to define behavior for:
You override these by implementing "magic methods" such as:
These make your objects feel native and intuitive.
🔢 2. Overloading Arithmetic Operators
Let's build a simple 2D vector class with all arithmetic operators:
🧠 3. Overloading String & Representation Functions
Two methods control how your objects appear in logs, REPLs, and print statements:
🧩 4. Comparison Operators
To support sorting, filtering, searching, or ordering, implement:
📦 5. Overloading Indexing & Slicing
🔄 6-7. Membership & Iteration
🔥 8-9. Boolean & Call Behavior
⚡ 10-11. Reverse & Augmented Operators
🎯 12-13. Rich Container & Matrix Indexing
🌀 14-16. Bitwise & Context Operators
👑 17-19. DSL Building with Operators
Massive libraries rely on operator overloads to create readable "fake languages":
🧩 20-22. Attribute Access & Delegation
🔥 23-24. Complete Mathematical System
🧵 25-27. Immutable vs Mutable Design
⚡ 28-30. Computation Graphs & Best Practices
🎯 Summary — You Now Understand the Full Python Operator Model
This puts you at a framework engineer level (the people who build NumPy/Pandas/PyTorch, not just use them).
📋 Quick Reference — Operator Overloading
Your classes can now support arithmetic, comparisons, and other operators — making your APIs as intuitive as built-in Python types.
Up next: Mixins — compose reusable behaviour across multiple classes without deep inheritance chains.
Practice quiz
Which magic method implements the + operator?
- __plus__
- __sum__
- __add__
- __concat__
Answer: __add__. Defining __add__(self, other) makes a + b work on your objects.
Which magic method enables == comparisons?
- __eq__
- __equals__
- __cmp__
- __is__
Answer: __eq__. __eq__ controls the == operator.
Implementing __lt__ on a class primarily enables what?
- Addition
- Indexing
- Iteration
- Sorting and < comparisons
Answer: Sorting and < comparisons. __lt__ defines < and lets Python sort instances with sorted().
When is __rmul__ called?
- Never
- When the left operand (e.g. an int) doesn't know how to multiply your object
- Only inside loops
- When you call the object
Answer: When the left operand (e.g. an int) doesn't know how to multiply your object. __rmul__ handles the reflected case like 3 * v where the left operand can't handle it.
Which method makes an object respond to the len() built-in?
- __len__
- __size__
- __count__
- __length__
Answer: __len__. __len__ defines what len(obj) returns.
Which method makes an object callable like a function, obj(x)?
- __invoke__
- __run__
- __call__
- __exec__
Answer: __call__. __call__ lets an instance be called like obj(x).
Which method controls the [] indexing operator, obj[key]?
- __index__
- __getitem__
- __getattr__
- __get__
Answer: __getitem__. __getitem__ handles obj[key] indexing and slicing.
In the lesson, what does the Path class's __truediv__ let you write?
- Path('a') + 'b'
- Path('a') * 2
- Path('a') - 'b'
- Path('home') / 'user'
Answer: Path('home') / 'user'. __truediv__ overloads /, so Path('home') / 'user' builds a path like Pathlib.
What should an arithmetic operator return for an unsupported operand type?
- None
- NotImplemented
- Raise immediately
- False
Answer: NotImplemented. Returning NotImplemented lets Python try the reflected operator before raising TypeError.
Which method makes a permission flags class support the | operator (READ | WRITE)?
- __bitor__
- __pipe__
- __or__
- __union__
Answer: __or__. __or__ overloads the bitwise | operator.