Python Operator Overloading

🆕 🔜 Check this out if you dream of running a solo Internet business 🏖️

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__() respond to the + operator
  • __sub__() respond to the operator
  • __mul__() respond to the * operator
  • __truediv__() respond to the / operator
  • __floordiv__() respond to the // operator
  • __mod__() respond to the % operator
  • __pow__() respond to the ** operator
  • __rshift__() respond to the >> operator
  • __lshift__() respond to the << operator
  • __and__() respond to the & operator
  • __or__() respond to the | operator
  • __xor__() respond to the ^ operator

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