Курс 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. Colorama: окрашивание текста в Python
  2. Метод __float__ в Python
  3. Обработка ошибок в JSON данных
  4. Взаимодействие с внешними процессами в Python
  5. Склеивание строк без циклов
  6. Логирование с Logzero
  7. Работа с датами в Python
  8. Метод clear для коллекций
  9. Генерация случайных чисел в Python
  10. Контекстный менеджер в Python
  11. Использование метода lower()
  12. Работа со случайными элементами
  13. Работа с областями видимости переменных
  14. Метод splitlines() для разделения строк
  15. Операторы объединения в Python 3.9
  16. Оценка точности модели
  17. Функция zip() — объединение последовательностей
  18. Ускоренный импорт библиотек
  19. Принципы Zen Python
  20. Сравнение строк в Python
  21. Работа с очередями в Python
  22. Работа с каталогами в Python
  23. Поиск индекса элемента в списке
  24. Установка и использование howdoi
  25. Управление памятью в numpy.
  26. Виртуальное окружение Python
  27. Работа с атрибутом dict
  28. Метод join для наборов
  29. Атрибуты класса и экземпляра
  30. Создание класса в Python
  31. Метод __ixor__ для побитового исключающего ИЛИ
  32. Списки в Python: синтаксис представления
  33. Избегание циклических зависимостей классов в Python
  34. Проверка списка: any() и all()
  35. Многострочные комментарии в Python
  36. Методы shutil для работы с файлами
  37. Управление асинхронными задачами на Python.
  38. Метод ne для сравнения объектов
  39. Измерение потребления памяти при сортировке
  40. Измерение времени выполнения кода в Python
  41. Перехват исключений в Python
  42. Python 3.12: Псевдонимы типов
  43. Настройка вывода в Numpy
  44. Операторы присваивания в Python
  45. Применение функции map() в Python
  46. Добавление элементов в список: append() vs extend()
  47. Автоматизация с Python
  48. Тернарный оператор в Python

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

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