AI Workshop: learn to build apps with AI →
Functions and OOP: Operator overloading

Join the AI Workshop and learn to build real-world apps with AI. A hands-on, practical program to level up your skills.


Operator overloading is an advanced technique we can use to make classes comparable and to make them work with Python operators.

Let’s take a class Dog:

class Dog:
    # the Dog class
    def __init__(self, name, age):
        self.name = name
        self.age = age

Let’s create 2 Dog objects:

roger = Dog('Roger', 8)
syd = Dog('Syd', 7)

We can use operator overloading to add a way to compare those 2 objects, based on the age property:

class Dog:
    # the Dog class
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __gt__(self, other):
        return True if self.age > other.age else False

Now if you try running print(roger > syd) you will get the result True.

In the same way we defined __gt__() (which means greater than), we can define the following methods:

  • __eq__() to check for equality
  • __lt__() to check if an object should be considered lower than another with the < operator
  • __le__() for lower or equal (<=)
  • __ge__() for greater or equal (>=)
  • __ne__() for not equal (!=)

Then you have methods to interoperate with arithmetic operations:

  • __add__() responds to the + operator
  • __sub__() responds to the - operator
  • __mul__() responds to the * operator
  • __truediv__() responds to the / operator
  • __floordiv__() responds to the // operator
  • __mod__() responds to the % operator
  • __pow__() responds to the ** operator
  • __rshift__() responds to the >> operator
  • __lshift__() responds to the << operator
  • __and__() responds to the & operator
  • __or__() responds to the | operator
  • __xor__() responds to the ^ operator

There are a few more methods to work with other operators, but you got the idea.

Lessons in this unit:

0: Introduction
1: Functions
2: Lambda functions
3: Nested functions
4: Recursion
5: Closures
6: Objects
7: Classes
8: Polymorphism
9: ▶︎ Operator overloading