- To customize the behavior of the greather than operator
x > y, override the
__gt__()dunder method in your class definition.
- Python internally calls
x.__gt__(y)to obtain a return value when comparing two objects using
x > y.
- The return value can be any data type because any value can automatically converted to a Boolean by using the
- If the
__gt__()method is not defined, Python will raise a
To use the greater than operator on custom objects, define the
__gt__() “dunder” magic method that takes two arguments:
other. You can then use attributes of the custom objects to determine if one is greater than the other.
The method should return a Boolean
False — however, this is not required because every object can be automatically converted to a Boolean value using the built-in
Let’s have a look at an example next.
In the following code, you compare two persons with each other by using the
age attribute as a decision criterion:
class Person: def __init__(self, age): self.age = age def __gt__(self, other): return self.age > other.age alice = Person(18) bob = Person(17) carl = Person(18) print(alice > bob) # True print(alice > carl) # False print(bob > alice) # False
For example, because Alice’s age is 18 years and Bob’s 17 years, the expression
alice > bob evaluates to
Default Implementation of __gt__
__gt__() dunder method doesn’t have a default implementation. If you try to compare objects using the greater than operator
>, Python will simply raise a
class Person: def __init__(self, age): self.age = age alice = Person(18) bob = Person(17) carl = Person(18) print(alice > bob)
Traceback (most recent call last): File "C:\Users\...\code.py", line 10, in <module> print(alice > bob) TypeError: '>' not supported between instances of 'Person' and 'Person'
TypeError: ‘>’ not supported between instances of ‘…’ and ‘…’
If you get the
TypeError: '>' not supported between instances of '...' and '...', you try to compare two objects using the greater than operator
x > y for which the
__gt__() magic method is not defined.
class Finxter: pass x = Finxter() y = Finxter() x > y # Python will raise an error!
Traceback (most recent call last): File "C:\...\code.py", line 8, in <module> x > y # Python will raise an error! TypeError: '>' not supported between instances of 'Finxter' and 'Finxter'
To fix the error, simply define the
__gt__(self, other) method in your class definition and return any object that will then be converted to a Boolean
class Finxter: def __gt__(self, other): return 42 x = Finxter() y = Finxter() x > y # Now it works! # 42
Commutativity of Greater Than >
The output of
x > y and
y > x may be different because the former calls
x.__gt__(y) and the latter calls
y have different definitions of the dunder method
__gt__(), the operation becomes non-commutative.
You can see this in the following example:
class Person: def __gt__(self, other): return False class Human: def __gt__(self, other): return True alice = Person() bob = Human() print(alice > bob) # False print(bob > alice) # True
💡 Programming is 10% science, 20% ingenuity, and 70% getting the ingenuity to work with the science.
- Question: Why do Java programmers wear glasses?
- Answer: Because they cannot C# …!
Feel free to check out our blog article with more coding jokes. 😉
While working as a researcher in distributed systems, Dr. Christian Mayer found his love for teaching computer science students.
To help students reach higher levels of Python success, he founded the programming education website Finxter.com that has taught exponential skills to millions of coders worldwide. He’s the author of the best-selling programming books Python One-Liners (NoStarch 2020), The Art of Clean Code (NoStarch 2022), and The Book of Dash (NoStarch 2022). Chris also coauthored the Coffee Break Python series of self-published books. He’s a computer science enthusiast, freelancer, and owner of one of the top 10 largest Python blogs worldwide.
His passions are writing, reading, and coding. But his greatest passion is to serve aspiring coders through Finxter and help them to boost their skills. You can join his free email academy here.