Bird
Raised Fist0
Pythonprogramming~5 mins

Comparison magic methods in Python

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
Introduction

Comparison magic methods let you decide how objects compare to each other using operators like <, >, ==, and more.

When you want to compare two custom objects to see if they are equal.
When sorting a list of your custom objects based on some property.
When checking if one object is greater or smaller than another.
When using comparison operators in conditions with your own classes.
Syntax
Python
def __eq__(self, other):
    # return True if self equals other

def __lt__(self, other):
    # return True if self is less than other

def __le__(self, other):
    # return True if self is less than or equal to other

def __gt__(self, other):
    # return True if self is greater than other

def __ge__(self, other):
    # return True if self is greater than or equal to other

def __ne__(self, other):
    # return True if self is not equal to other

Each method should return a boolean (True or False).

Use these methods inside your class to customize how comparison operators work.

Examples
Checks if two objects have the same 'value' property.
Python
def __eq__(self, other):
    return self.value == other.value
Returns True if self's value is less than other's value.
Python
def __lt__(self, other):
    return self.value < other.value
Returns True if values are not equal.
Python
def __ne__(self, other):
    return self.value != other.value
Sample Program

This program creates a Box class with a volume. It compares boxes by their volume using ==, <, and > operators.

Python
class Box:
    def __init__(self, volume):
        self.volume = volume

    def __eq__(self, other):
        return self.volume == other.volume

    def __lt__(self, other):
        return self.volume < other.volume

    def __gt__(self, other):
        return self.volume > other.volume

box1 = Box(10)
box2 = Box(20)
box3 = Box(10)

print(box1 == box2)  # False
print(box1 == box3)  # True
print(box1 < box2)   # True
print(box2 > box3)   # True
OutputSuccess
Important Notes

Only __eq__ and __ne__ are required for equality checks; others are for ordering.

If you define __eq__, also define __ne__ for consistent behavior.

Python can use functools.total_ordering to fill in missing comparison methods if you define __eq__ and one ordering method.

Summary

Comparison magic methods let you control how objects compare with ==, <, >, etc.

Define these methods inside your class to customize comparisons.

They return True or False based on your rules.

Practice

(1/5)
1. Which magic method in Python is used to define the behavior of the equality operator ==?
easy
A. __eq__
B. __lt__
C. __ne__
D. __gt__

Solution

  1. Step 1: Understand the equality operator

    The == operator checks if two objects are equal.
  2. Step 2: Identify the corresponding magic method

    In Python, __eq__ is the method that defines equality behavior.
  3. Final Answer:

    __eq__ -> Option A
  4. Quick Check:

    Equality operator uses __eq__ [OK]
Hint: Remember: eq means equal, so __eq__ handles == [OK]
Common Mistakes:
  • Confusing __eq__ with __lt__ or __gt__
  • Thinking __ne__ handles equality
  • Mixing up method names with comparison operators
2. Which of the following is the correct syntax to define the less than operator < in a Python class?
easy
A. def __lt__(self):
B. def __less_than__(self, other):
C. def __less__(self, other):
D. def __lt__(self, other):

Solution

  1. Step 1: Recall the magic method name for <

    The method for < is __lt__ and it takes two parameters: self and other.
  2. Step 2: Check method signature correctness

    Correct syntax is def __lt__(self, other):. Other options have wrong names or missing parameters.
  3. Final Answer:

    def __lt__(self, other): -> Option D
  4. Quick Check:

    Less than operator uses __lt__(self, other) [OK]
Hint: Magic methods for comparisons always take self and other [OK]
Common Mistakes:
  • Using wrong method names like __less_than__
  • Omitting the other parameter
  • Using incorrect method signatures
3. What will be the output of the following code?
class Number:
    def __init__(self, value):
        self.value = value
    def __gt__(self, other):
        return self.value > other.value

n1 = Number(5)
n2 = Number(3)
print(n1 > n2)
medium
A. False
B. TypeError
C. True
D. None

Solution

  1. Step 1: Understand the __gt__ method

    The __gt__ method compares self.value and other.value.
  2. Step 2: Evaluate the comparison

    n1.value is 5 and n2.value is 3, so 5 > 3 is True.
  3. Final Answer:

    True -> Option C
  4. Quick Check:

    5 > 3 = True [OK]
Hint: Check the values inside objects when comparing [OK]
Common Mistakes:
  • Forgetting to compare attributes inside objects
  • Expecting print to show object addresses
  • Confusing __gt__ with __lt__
4. Identify the error in the following class that tries to implement the not equal operator !=:
class Item:
    def __init__(self, val):
        self.val = val
    def __ne__(self):
        return self.val != other.val
medium
A. The class should inherit from object explicitly
B. __ne__ method is missing the other parameter
C. The __ne__ method should return True always
D. The __init__ method is missing self

Solution

  1. Step 1: Check __ne__ method signature

    The __ne__ method must take two parameters: self and other.
  2. Step 2: Identify missing parameter

    Here, other is used but not declared as a parameter, causing an error.
  3. Final Answer:

    __ne__ method is missing the other parameter -> Option B
  4. Quick Check:

    __ne__ needs (self, other) parameters [OK]
Hint: Comparison methods always take self and other [OK]
Common Mistakes:
  • Omitting the other parameter in comparison methods
  • Misunderstanding method signatures
  • Thinking inheritance from object is required in Python 3
5. You want to create a class Box where two boxes are considered equal if their volumes are equal. Which magic method should you implement and how?
class Box:
    def __init__(self, length, width, height):
        self.length = length
        self.width = width
        self.height = height
    # Your code here
hard
A. Implement __eq__(self, other) to compare volumes: return self.length * self.width * self.height == other.length * other.width * other.height
B. Implement __lt__(self, other) to compare volumes
C. Implement __ne__(self, other) to compare volumes
D. Implement __gt__(self, other) to compare volumes

Solution

  1. Step 1: Identify the comparison needed

    Equality means using ==, so implement __eq__.
  2. Step 2: Define volume comparison inside __eq__

    Calculate volume for both boxes and compare for equality.
  3. Final Answer:

    Implement __eq__(self, other) to compare volumes: return self.length * self.width * self.height == other.length * other.width * other.height -> Option A
  4. Quick Check:

    Equality uses __eq__ comparing volumes [OK]
Hint: Use __eq__ to define equality based on volume [OK]
Common Mistakes:
  • Using __lt__ or __gt__ for equality
  • Not comparing volumes but attributes directly
  • Forgetting to implement __eq__ for == operator