Загружаем изображение…
Знаете, что Python умеет автоматически генерировать все операторы сравнения класса?
Обычно для полноценного сравнения объектов приходится вручную реализовывать
Это не только шаблонный код, но и источник трудноуловимых ошибок, когда логика сравнения расходится между методами.
После этого объекты начинают корректно работать с sorted, min, max, heapq и любыми алгоритмами порядка.
Это особенно полезно для версий, приоритетов, доменных сущностей и любых custom-типов с отношением порядка.
Python Ready | #совет
Обычно для полноценного сравнения объектов приходится вручную реализовывать
__lt__, __le__, __gt__, __ge__, __eq__.Это не только шаблонный код, но и источник трудноуловимых ошибок, когда логика сравнения расходится между методами.
def __lt__(self, other): ...
def __eq__(self, other): ...functools.total_ordering генерирует остальные методы автоматически, если определить базовые операции сравнения.@total_ordering
class Version:После этого объекты начинают корректно работать с sorted, min, max, heapq и любыми алгоритмами порядка.
v1 < v2
v1 >= v2Это особенно полезно для версий, приоритетов, доменных сущностей и любых custom-типов с отношением порядка.
sorted(versions)total_ordering позволяет централизовать логику сравнения в одном месте и исключить дублирование операторов в production-коде.Python Ready | #совет