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

Joe*_*ner 8 python

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

a < b < c
Run Code Online (Sandbox Code Playgroud)

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

Ash*_*ary 14

内部,它作为处理a < b and b < c,所以你需要重载只__lt__,__gt__等等.

来自文档:

x <y <= z等于x <y且y <= z,除了y仅被评估一次(但在两种情况下,当x <y被发现为假时,根本不评估z).

>>> 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  
Run Code Online (Sandbox Code Playgroud)

演示:

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
Run Code Online (Sandbox Code Playgroud)