Где определены богатые сравнения специальных методов базовых объектов? - PullRequest
0 голосов
/ 24 февраля 2020

Мне интересен механизм, стоящий за богатыми операторами сравнения, и особенно места, где определяются эти специальные методы. Рассмотрим следующие терминальные сеансы:

# The most base type
>>> obj = object()
>>> dir(obj)
[... , __eq__', '__ge__', '__gt__', '__le__', '__lt__', '__ne__', ...]

Я знаю, что self .__ eq __ (other) рассчитывается путем сравнения идентификаторов объектов, но где я могу найти это, определенное в исходном коде?

>>> a = obj
>>> b = obj
>>> a == b
True

Кроме того, я не могу вызвать self .__ lt __ (other), так как это не определено, что является ожидаемым поведением, но где это реализовано в исходном коде, поскольку метод отображается в вызове dir()? Я предполагаю, что расширенные операторы сравнения, кроме __eq__ и __ne__, определены как абстрактные методы?

>>> a < b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'object' and 'object'
...