Перейдите в эту проблему (в Python 2.7.5) с небольшой опечаткой:
def foo(): return 3
if foo > 8:
launch_the_nukes()
Давай, я случайно взорвал Луну.
Я понимаю, что E > F
эквивалентен (E).__gt__(F)
и для хорошо выполненных классов (таких как встроенные), эквивалентных (F).__lt__(E)
.
Если нет операторов __lt__
или __gt__
, то я думаю, что Python использует __cmp__
.
Но ни один из этих методов не работает с объектами function
, пока работают операторы <
и >
. Что происходит под капотом, что делает это возможным?
>>> foo > 9e9
True
>>> (foo).__gt__(9e9)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute '__gt__'
>>> (9e9).__lt__(foo)
NotImplemented