Мне интересен механизм, стоящий за богатыми операторами сравнения, и особенно места, где определяются эти специальные методы. Рассмотрим следующие терминальные сеансы:
# 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'