Курс 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. Измерение времени выполнения кода
  2. Слияние словарей в Python 3.9
  3. Приоритет операций в Python
  4. Потоковый ввод в Python
  5. Инверсия списка и строки
  6. Разбиение строки в Python
  7. Работа с collections в Python.
  8. Преобразование PowerPoint в PDF.
  9. Вывод символов строки в Python
  10. Получение текущей даты и времени
  11. Работа с итераторами в Python
  12. Удаление файлов с shutil.os.remove()
  13. Разделение строки с регулярными выражениями
  14. Профилирование данных с Pandas
  15. Методы работы со списками
  16. Сортировка в Python
  17. Встраивание HTML в Jupyter Notebook
  18. Форматирование даты с strftime()
  19. Именованные срезы в Python
  20. Использование двоеточия в Python
  21. Создание пустых функций и классов в Python
  22. Протокол управления контекстом
  23. Форматирование вывода с F-строками
  24. Работа с JSON в Python
  25. Обработка исключений в Python 3
  26. Анализ текста на русском языке с помощью Pymystem3
  27. Округление чисел с помощью round
  28. Работа с датами в Python
  29. PrettyTable: создание таблицы
  30. Работа с f-строками 2.0
  31. Библиотека sh: удобные команды терминала
  32. Генераторы в Python
  33. Работа с классами данных
  34. Поток данных в Python
  35. Функция all() в Python
  36. Создание и инициализация объектов
  37. Работа с CSV файлами
  38. Аннотации типов в Python
  39. Работа с итераторами через срезы
  40. Создание класса очереди
  41. Конкатенация строк с join() в Python
  42. Объединение словарей в Python
  43. Списки: объединение, изменение
  44. Поиск индекса элемента
  45. Запуск асинхронной корутины

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

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