Python: почему в классе int нет расширенных операторов сравнения, таких как `__lt__()`?

В основном любопытно.

Я заметил (по крайней мере, в py 2.6 и 2.7), что floatимеет все знакомые расширенные функции сравнения: __lt__(), __gt__, __eq__и т. д.

>>> (5.0).__gt__(4.5)
True

но intне работает

>>> (5).__gt__(4)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
AttributeError: 'int' object has no attribute '__gt__'

Что странно для меня, потому что сам оператор работает нормально

>>> 5 > 4
True

Даже строки поддерживают функции сравнения

>>> "hat".__gt__("ace")
True

, но все, что имеет int, это __cmp__()

Мне это кажется странным, и поэтому мне было интересно, почему это произошло.

Только что протестировано, и он работает так, как ожидалось, в python 3, поэтому я предполагаю некоторые устаревшие причины. Тем не менее хотелось бы услышать нормальное объяснение ;)

21
задан jisaacstone 30 May 2012 в 04:19
поделиться