Курс 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"
- Создание итерируемых объектов
- Вычисление натурального логарифма в NumPy
- Исключение NotImplementedError
- Раздувающийся словарь в Python
- Определение функций с необязательными аргументами
- Счетчик ссылок в Python
- Поиск индекса элемента
- Python defaultdict добавление ключа
- Многострочные комментарии в Python
- Функция enumerate в Python
- Метод add для класса Vector
- Синтаксис переменных цикла в Python
- Глобальные переменные в Python
- Функции range() в Python
- Именование столбцов в Python с pandas
- Логические операторы в Python
- Использование модуля math
- Уникальность ключей в словаре
- lru_cache оптимизация функций
- Изменение IP-адреса в Python
- Python Ellipsis использование
- Импорт объектов из модулей
- Моржовый оператор в Python 3.8
- Порядок и длина множеств в Python
- TON Smart Challenge #2: участие и подготовка
- Применение команды break
- Создание инструмента обнаружения плагиата
- Срезы в Python
- Очистка строки в Python
- Enum в Python: создание и использование перечислений
- Создание директории в Python
- Срез в Python
- Перебор элементов списка в Python
- Очистка вывода в Python
- Подчеркивание в REPL
- Работа с парами ключ-значение
- Оптимизация памяти с __slots__
- Скрытие вывода данных
- Динамическая типизация в Python
- Создание списков в Python
- Функция product() в Python
- Python Метод Union Множеств
- Функции all и any в Python
- Приоритет операций в Python
- Создание списков в Python
- Работа с очередями в Python















