Open In App

Python Functools – total_ordering()

Last Updated : 26 Mar, 2020
Improve
Improve
Like Article
Like
Save
Share
Report

Functools module in python helps in implementing higher-order functions. Higher-order functions are dependent functions that call other functions. Total_ordering provides rich class comparison methods that help in comparing classes without explicitly defining a function for it. So, It helps in the redundancy of code.

The six rich class comparison methods are:

  • object.__lt__(self, other)
  • object.__le__(self, other)
  • object.__eq__(self, other)
  • object.__ne__(self, other)
  • object.__gt__(self, other)
  • object.__ge__(self, other)

There are 2 essential conditions to implement these comparison methods:

  • At least one of the comparison methods must be defined from lt(less than), le(less than or equal to), gt(greater than) or ge(greater than or equal to).
  • The eq function must also be defined.

Example:




from functools import total_ordering
  
  
@total_ordering
class Students:
    def __init__(self, cgpa):
        self.cgpa = cgpa
  
    def __lt__(self, other):
        return self.cgpa<other.cgpa
  
    def __eq__(self, other):
        return self.cgpa == other.cgpa
  
    def __le__(self, other):
        return self.cgpa<= other.cgpa
      
    def __ge__(self, other):
        return self.cgpa>= other.cgpa
          
    def __ne__(self, other):
        return self.cgpa != other.cgpa
  
Arjun = Students(8.6)
  
Ram = Students(7.5)
  
print(Arjun.__lt__(Ram))
print(Arjun.__le__(Ram))
print(Arjun.__gt__(Ram))
print(Arjun.__ge__(Ram))
print(Arjun.__eq__(Ram))
print(Arjun.__ne__(Ram))


Output

False
False
True
True
False
True

Note: Since the __gt__ method is not implemented, it shows “Not

Example 2:




from functools import total_ordering
  
@total_ordering
class num:
      
    def __init__(self, value):
        self.value = value
          
    def __lt__(self, other):
        return self.value < other.value
        
    def __eq__(self, other):
          
        # Changing the functionality
        # of equality operator
        return self.value != other.value
          
# Driver code
print(num(2) < num(3))
print(num(2) > num(3))
print(num(3) == num(3))
print(num(3) == num(5))


Output:

True
False
False
True


Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads