我想知道是否有可能在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)