Курс 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. Освобождение памяти в Python
  4. Создание класса очереди
  5. Экранирование символов в Python
  6. Декораторы в Python
  7. Операторы объединения в Python 3.9
  8. Разбиение строки в Python
  9. Python reversed() функция
  10. Управление виртуальными средами в Python
  11. Списки в Python: основы
  12. Обработка исключений в Python
  13. Метод join() для объединения элементов строки
  14. Профилирование кода на Python
  15. Улучшенные подсказки для импорта в Python 3.12
  16. Подсчет часто встречающихся элементов
  17. *args и **kwargs в Python
  18. Избегайте использования goto
  19. Метод ior для битовых операций
  20. Справка по импортированным модулям
  21. Циклы в Python
  22. Работа с NumPy.linalg
  23. Объединение списков с использованием itertools.chain
  24. Работа со строками в Python
  25. Работа с пользовательским вводом
  26. Частичное совпадение ввода
  27. Тестирование модели в PyTorch
  28. Лямбда-функции в Python
  29. Итерация по копии коллекции
  30. Метод split() в Python
  31. Проблемы с dict в Python
  32. Применение функции к списку
  33. Красивый вывод списка
  34. Переменная Шредингера
  35. Преобразование символов с помощью map
  36. Работа с географическими данными в Python
  37. Перегрузка операторов в Python
  38. Python: Фильтрация списков с помощью filter()
  39. Замыкания в Python
  40. Python Метод sleep() времени
  41. Фильтрация входных данных в Python
  42. Изменение переменной в Python: nonlocal
  43. Лямбда-функции в Python
  44. Роль object и type в Python
  45. Руководство по использованию Colorama
  46. Сериализация и десериализация объектов
  47. Реверс строки в Python
  48. Кортежи в Python: особенности и преимущества

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

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