gpt4 book ai didi

python - `foo < bar < baz` 实际调用了哪些方法?

转载 作者:太空狗 更新时间:2023-10-29 19:35:36 25 4
gpt4 key购买 nike

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

最佳答案

if foo < bar < baz:

相当于

if foo < bar and bar < baz:

有一个重要的区别:如果 bar 是变异的,它将被缓存。即:

if foo < bar() < baz:

相当于

tmp = bar()
if foo < tmp and tmp < baz:

但要回答您的问题,最终会是:

if foo.__lt__(bar) and bar.__lt__(baz):

关于python - `foo < bar < baz` 实际调用了哪些方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4200822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com