Курс 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. Метод join для наборов
  3. Форматирование данных с помощью pprint
  4. Сглаживание списка
  5. Форматирование строк с f-строками
  6. inspect в Python: анализ кода
  7. Оператор (*) в Python
  8. Решение переменной Шредингера
  9. Реализация метода __abs__ в Python
  10. Метод rmatmul для обратного матричного умножения
  11. Безопасный доступ к значениям словаря
  12. Функции в Python: создание и вызов
  13. Декораторы в Python
  14. Работа с изображениями PIL
  15. Проверка типов с помощью isinstance
  16. Функция zip() в Python
  17. Итерация по итерируемым объектам
  18. Функция zip() в Python
  19. Переопределение унарных операторов
  20. Явный импорт в Python
  21. Присвоение значений переменным в Python
  22. Оператор Walrus в Python
  23. Дефолтные параметры в Python
  24. PEP-401: оператор
  25. Управление User-Agent в Python
  26. Блок try-except-else
  27. Работа с комплексными числами в Python
  28. Подсчет элементов в Python
  29. Распаковка элементов массива
  30. Работа с часовыми поясами в Python
  31. Тестирование с unittest
  32. CSV строка разделение в Python
  33. Преобразование данных в Python
  34. Форматирование чисел в Python
  35. Поиск самого длинного слова в списке с использованием max()
  36. Поиск наиболее частого элемента в списке
  37. Метод join() для объединения элементов в строку.
  38. Отображение графиков в Jupyter с Matplotlib
  39. Работа с исключениями в Python
  40. Библиотека schedule: планировщик задач
  41. Цикл for с enumerate() в Python
  42. Нахождение максимального значения и его индекса в списке
  43. Создание списка через цикл
  44. Получение имени функции с помощью inspect
  45. Фильтрация списка от «ложных» значений
  46. Удаление символа из строки

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

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