‣
__lt__ для <‣
__gt__ для >‣
__le__ для <=‣
__ge__ для >=‣
__eq__ для ==‣
__ne__ для !=Если некоторые из этих методов не определены или возвращают
NotImplemented, применяются следующие правила:‣
a.__lt__(b) эквивалентно b.__gt__(a)‣
a.__le__(b) эквивалентно b.__ge__(a)‣
a.__eq__(b) эквивалентно not a.__ne__(b) (обратите внимание, что в этом случае a и b не меняются местами)Однако, из
a >= b и a != b не следует автоматически, что a > b.Декоратор
functools.total_ordering создает все шесть методов на основе __eq__ и одного из следующих: __lt__, __gt__, __le__ или __ge__.
from functools import total_ordering
@total_ordering
class User:
def __init__(self, pk, name):
self.pk = pk
self.name = name
def __le__(self, other):
return self.pk <= other.pk
def __eq__(self, other):
return self.pk == other.pk
assert User(2, 'Vadim') < User(13, 'Catherine')
👉@BookPython