Курс 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. Оператор continue в Python
  3. Операции с датами в Python
  4. Распаковка аргументов в Python
  5. Измерение времени выполнения кода
  6. Модуль array: создание и использование массивов
  7. Лямбда-функции в Python
  8. Упрощение условных выражений с тернарным оператором
  9. Поиск шаблона в начале строки
  10. Сортировка HTML по CSS-селектору
  11. Блок else в обработке исключений
  12. Метод setdefault() в Python
  13. Установка и обучение ChatterBot
  14. Обработка ошибок в Python
  15. Отладка в Python
  16. Измерение времени выполнения кода
  17. Оператор in для Python
  18. Исправление ошибки NameError
  19. Декораторы в Python
  20. Импорт и использование модулей в Python
  21. Итерация по копии коллекции
  22. Метод join для объединения строк
  23. Python reversed() функция
  24. Метод ne для сравнения объектов
  25. Множественные конструкторы в Python
  26. Объединение кортежей в Python
  27. %pinfo: получение информации об объекте
  28. Оператор «is not» в Python
  29. Функция zip() в Python
  30. Оператор * в Python
  31. Вычисление логарифмов в Python
  32. Метод __index__ в Python
  33. Упрощение работы с JSON-данными в Python
  34. Работа с модулем glob в Python
  35. Python Аргументы по умолчанию
  36. Импорт модулей и пакетов в Python
  37. Поиск индекса элемента
  38. Вычисление разности множеств в Python
  39. Метод rxor для операции побитового исключающего «или»
  40. Python union() функция — объединение множеств
  41. Операции с матрицами в Python
  42. Python defaultdict добавление ключа
  43. Удаление falsy-значений из списка с помощью filter

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

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