DEV Community

Cover image for Intro to Python: Day 16 - OOP - Overriding ==, >, and <
James Hubert
James Hubert

Posted on • Edited on

Intro to Python: Day 16 - OOP - Overriding ==, >, and <

Hi there 👋 I'm a New York City based web developer documenting my journey with React, React Native, and Python for all to see. Please follow my dev.to profile or my twitter for updates and feel free to reach out if you have questions. Thanks for your support!

Today we follow up on yesterday's post about overloading the built-in print method. This time, we're overloading ==, >, and < operators.

It's always useful to be able to compare things, and it's somewhat natural that two instances of the same class might be able to be compared. But the built-in functionality for those operators is to compare either numbers or strings, not classes.

Let's say we are a car dealership and we want a program that can help us figure out quickly what the value of different cars is. We want to just quickly compare them.

Obviously if I create a Car class and then compare two instances of that class, we'll just get an error. Like so:

class Car:
    def __init__(self, make, model, price):
        self.make = make
        self.model = model
        self.price = price

mustang = Car("Ford", "Mustang", 60000)
camaro = Car("Chevy", "Camaro", 50000)

print(mustang > camaro)

# Will print the following:
# ERROR!
# Traceback (most recent call last):
#  File "<string>", line 12, in <module>
# TypeError: '>' not supported between instances of 'Car' and # 'Car'
> 
Enter fullscreen mode Exit fullscreen mode

So to create method on this class that overrides the built-in functionality so that we can compare these Car class instances, let's use the built-in eq, gt, and lt methods.

class Car:
    #...
    def __eq__(self, target):
        if (self.price == target.price):
            return True
        else:
            return False

    def __gt__(self, target):
        if (self.__eq__(target) == True):
            return False
        elif (self.price > target.price):
            return True
        else:
            False

    def __lt__(self. target):
        if (self.__eq__(target) == True):
            return False
        elif (self.__gt__(target) == True):
            return False
        else:
            return True
Enter fullscreen mode Exit fullscreen mode

By using the built-in eq, gt, and lt keywords we can tap into this functionality and define our own behavior for ==, >, and <.

So now if we compare two cars:

mustang = Car("Ford", "Mustang", 60000)
camaro = Car("Chevy", "Camaro", 50000)

print(mustang > camaro)
print(mustang < camaro)
print(mustang == camaro)
Enter fullscreen mode Exit fullscreen mode

We get the result:

True
False
False
Enter fullscreen mode Exit fullscreen mode

If you like projects like this and want to stay up to date with more, check out my Twitter @stonestwebdev, I follow back! See you tomorrow for another project.

Top comments (0)