можливо, цей уривок із Документів може допомогти:
Це так звані методи "багатого порівняння", і вони називаються операторами порівняння, надаючи перевагу __cmp__()
нижче. Відповідність між символами операторів і іменами методів виглядають наступним чином : x<y
дзвінки
x.__lt__(y)
, x<=y
дзвінки x.__le__(y)
,
x==y
дзвінки x.__eq__(y)
, x!=y
і x<>y
виклик x.__ne__(y)
, x>y
виклики
x.__gt__(y)
та x>=y
виклики
x.__ge__(y)
.
Багатий метод порівняння може повернути синглтон, NotImplemented
якщо він не реалізує операцію для заданої пари аргументів. За умовою False
і True
повертаються для успішного порівняння. Однак ці методи можуть повернути будь-яке значення, тому якщо оператор порівняння використовується в булевому контексті (наприклад, за умови заяви if), Python закликає bool()
значення, щоб визначити, чи є результат істинним чи помилковим.
Між операторами порівняння не маються на увазі зв’язки. Істина x==y
не означає, що x!=y
це помилково. Відповідно, визначаючи
__eq__()
, слід також визначитись __ne__()
так, що оператори будуть вести себе так, як очікувалося. У розділі __hash__()
наведено деякі важливі зауваження щодо створення об'єктів, що підтримують хід, які підтримують спеціальні операції порівняння та можуть використовуватися як словники.
Немає версій цих методів з заміненим аргументом (використовуватися, коли лівий аргумент не підтримує операцію, а правий аргумент); швидше, __lt__()
і __gt__()
є відображенням один одного, __le__()
і __ge__()
є відображенням один одного, __eq__()
і __ne__()
є їх власним відображенням.
Аргументи багатих методів порівняння ніколи не примушуються.
Це були порівняння, але, оскільки ви пов'язуєте порівняння, ви повинні знати, що:
Порівняння можуть бути пов'язані довільно, наприклад, x < y <= z
еквівалентно x < y and y <= z
, за винятком того, що y оцінюється лише один раз (але в обох випадках z взагалі не оцінюється, коли x <y виявляється помилковим).
Формально, якщо a, b, c, ..., y, z - це вирази, а op1, op2, ..., opN є операторами порівняння, то op1 b op2 c ... y opN z еквівалентно op1 b і b op2 c і ... y opN z, за винятком того, що кожен вираз оцінюється не більше одного разу.