how to overload operator "< <" (a < x < b)?

Robert Lehmann stargaming at gmail.com
Fri Aug 7 09:59:45 EDT 2009


On Fri, 07 Aug 2009 08:50:52 -0400, Benjamin Kaplan wrote:

> On Fri, Aug 7, 2009 at 8:00 AM, dmitrey<dmitrey.kroshko at scipy.org>
> wrote:
>> hi all,
>> is it possible to overload operator "<  <"? (And other like this one,
>> eg "<=  <=", ">  >", ">=  >=")
>> Any URL/example?
>> Thank you in advance, D.
> 
> That isn't an operator at all. Python does not support compound
> comparisons like that. You have to do "a > b and b > c".

Python actually allows you to chain comparison operators, automatically 
unpacking ``a > b > c`` to ``a > b and b > c``::

>>> class C(object):
...   def __lt__(self, other):
...     print self, "LESS-THAN", other
...     return True
... 
>>> a = C(); b = C(); x = C()
>>> a < x < b
<__main__.C object...> LESS-THAN <__main__.C object...>
<__main__.C object...> LESS-THAN <__main__.C object...>
True

>>> x = 42
>>> 40 < x < 50 # between 40 and 50
True
>>> 50 < x < 60 # between 50 and 60
False
>>> 1 == True < 2 == 2.0 < 3 < 4 != 5 > 0 # yikes, unreadable! but legal.
True
>>> # same as: (1 == True) and (True < 2) and (2 == 2.0) ...

HTH,

-- 
Robert "Stargaming" Lehmann




More information about the Python-list mailing list