是否有可能在python中重载多重比较语法?

时间:2013-06-19 17:51:54

标签: python

我想知道是否可以在python中重载多重比较语法:

a < b < c

我知道单个比较可能超载,是否有可能超载这些?

1 个答案:

答案 0 :(得分:14)

在内部,它被处理为a < b and b < c,因此您只需要重载__lt____gt__等。

来自docs

  

x&lt; y&lt; = z等于x&lt; y和y&lt; = z,除了y是   仅评估一次(但在两种情况下,z都不进行评估   x&lt; y被发现是假的。)

>>> import dis
>>> dis.dis(lambda : a < b < c)
  1           0 LOAD_GLOBAL              0 (a)
              3 LOAD_GLOBAL              1 (b)
              6 DUP_TOP             
              7 ROT_THREE           
              8 COMPARE_OP               0 (<)
             11 JUMP_IF_FALSE_OR_POP    21
             14 LOAD_GLOBAL              2 (c)
             17 COMPARE_OP               0 (<)
             20 RETURN_VALUE        
        >>   21 ROT_TWO             
             22 POP_TOP             
             23 RETURN_VALUE  

演示:

class A(object):
    def __lt__(self, other):
        print 'inside lt'
        return True
    def __gt__(self, other):
        print 'inside gt'
        return True
...        
>>> a = A()
>>> 10 < a < 20
inside gt
inside lt
True