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

2024-03-28 22:21:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

a < b < c

我知道单比较可能会过载,有可能过载吗?你知道吗


Tags: 语法
1条回答
网友
1楼 · 发布于 2024-03-28 22:21:02

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

docs

x < y <= z is equivalent to x < y and y <= z, except that y is evaluated only once (but in both cases z is not evaluated at all when x < y is found to be false).

>>> 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

相关问题 更多 >