在 Python 中,我们可以这样说:
if foo < bar < baz:
do something.
同样地,我们可以像这样重载比较运算符:
class Bar:
def __lt__(self, other):
do something else
但是,这些区间比较的操作数类型使用哪些方法进行调用?上述内容是否等同于:
if foo.__lt__(bar) and bar.__lt__(baz):
do something.
编辑:关于S.Lott的问题,这里提供一些输出结果以帮助说明实际发生的情况。
>>> class Bar:
def __init__(self, name):
self.name = name
print('__init__', self.name)
def __lt__(self, other):
print('__lt__', self.name, other.name)
return self.name < other.name
>>> Bar('a') < Bar('b') < Bar('c')
('__init__', 'a')
('__init__', 'b')
('__lt__', 'a', 'b')
('__init__', 'c')
('__lt__', 'b', 'c')
True
>>> Bar('b') < Bar('a') < Bar('c')
('__init__', 'b')
('__init__', 'a')
('__lt__', 'b', 'a')
False
>>>