Курс Python → Декоратор total_ordering для сравнения объектов

Для упрощения использования операторов сравнения в Python можно воспользоваться декоратором functools.total_ordering. Этот декоратор позволяет автоматически создать все операторы сравнения (__eq__, __ne__, __lt__, __le__, __gt__, __ge__>) на основе реализации лишь двух из них.

Например, если у вас есть класс Point с атрибутами x и y, и вы хотите сравнивать объекты этого класса, то достаточно реализовать методы __eq__ и __lt__>. Затем применить декоратор @functools.total_ordering к классу, чтобы автоматически получить остальные методы сравнения.


from functools import total_ordering

@total_ordering
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __eq__(self, other):
        return self.x == other.x and self.y == other.y

    def __lt__(self, other):
        return self.x < other.x or (self.x == other.x and self.y < other.y)

Теперь объекты класса Point могут быть сравниваемыми с помощью всех операторов сравнения. Например:


p1 = Point(1, 2)
p2 = Point(3, 4)

print(p1 == p2) # False
print(p1 != p2) # True
print(p1 < p2) # True
print(p1  p2) # False
print(p1 >= p2) # False

Таким образом, использование декоратора functools.total_ordering позволяет существенно упростить работу с операторами сравнения в Python, делая код более читаемым и компактным.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Python: динамическая типизация и проверка типов
  2. Вычисление логарифмов в Python
  3. Сравнение def и lambda функций в Python
  4. Создание и операции с дробями
  5. Улучшение читаемости кода в Python
  6. Множественные конструкторы в Python
  7. Основные операции с Numpy
  8. Присвоение и ссылки
  9. Экспорт внешнего файла с помощью writefile
  10. Асинхронное выполнение задач в процессах
  11. Методы HTTP запросов в Flask
  12. Нан-рефлексивность в Python
  13. Удаление ресурса в Python
  14. Перемешивание списка с shuffle()
  15. Распаковка элементов последовательности
  16. Резервирование символов в Python
  17. Компиляция регулярных выражений
  18. Создание файла с проверкой ошибки
  19. Имена объектов в Python
  20. Тестирование времени с Freezegun
  21. Работа с часовыми поясами в Python
  22. Работа с GitHub в Telegram
  23. Создание GUI на Tkinter
  24. Работа со стеком в Python
  25. Ускорение кода с помощью векторизации
  26. Искажение имен в Python
  27. Пустой оператор pass в Python
  28. Работа с PosixPath() в Python
  29. Переворот строки с использованием цикла
  30. Кортеж в Python: создание, доступ, изменение
  31. Установка и обучение ChatterBot
  32. Генерация UUID в Python
  33. Переопределение метода
  34. Инверсия списков и строк в Python
  35. Создание списков в Python
  36. Логирование в Python
  37. Удаление дубликатов из списка
  38. Определение наиболее частого элемента с помощью collections.Counter
  39. JMESPath в Python
  40. Декораторы с @wraps
  41. Основы Python

Marketello читают маркетологи из крутых компаний

Marketello.org — площадка для начинающих интернет-маркетологов, которая поможет прокачать твои навыки.
Много практики, в меру теории. Уникальный подход к обучению.
Присоединяйся!
Для авторов и партнёров
Facebook: https://fb.com/dmitriy.komarovskiy
© 2017-2025, Все права защищены.