New We are sorting MAX channels into categories and territories. Read the news
Loading image…

Знаете, что Python умеет автоматически генерировать все операторы сравнения класса?



Обычно для полноценного сравнения объектов приходится вручную реализовывать __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 | #совет
Views: 312
Open in MAX Report an inaccuracy

Report an inaccuracy

Describe what needs fixing. If you have a source, add a link.

You are leaving datool.ru

The link leads to an external website. datool.ru is not responsible for its content — check the address before entering passwords or payment details.

Redirecting in 10 s

Go