functools.total_ordering
Декоратор для классов, упрощающий реализацию «богатых» сравнений.
functools.total_ordering(cls)
-> cls
cls -- Класс, к которому требуется применить декоратор.
В Python 3, сравнение в стиле cmp более не используется, вместо этого пользовательские классы обязаны определять методы «богатого» сравнения.
Описываемый декоратор, позволяет для классов, в которых определён __eq__(), а также один из
__lt__(), __gt__(), __le__(), __ge__(), сгенерировать остальные методы автоматически.
Описываемый декоратор, позволяет для классов, в которых определён __eq__(), а также один из
__lt__(), __gt__(), __le__(), __ge__(), сгенерировать остальные методы автоматически.
from functools import total_ordering
@total_ordering
class NaiveStudent:
def __eq__(self, other):
return self.last_name == other.last_name
def __lt__(self, other):
return self.last_name < other.last_name
# Посмотрим, сгенерировал ли total_ordering метод __ge__:
NaiveStudent.__ge__ # < unbound method NaiveStudent.__ge__>
Внимание
Несмотря на то, что данный декоратор существенно облегчает создание полностью упорядоченных типов, за это всё же приходится платить как замедлением исполнения, так и более запутанными трассировками (когда они касаются методов, сгенерированных автоматически при помощи данного декоратора). Если тесты производительности указывают на то, что использование декоратора является узким местом в вашем приложении, то определение всех шести методов «богатого» сравнения вручную, вероятно, поможет ускориться.
Синонимы поиска: functools.total_ordering, functools, total_ordering
На заметку
Зарегистрированные пользователи могут публиковать свои мнения относительно Книг, Видео, Статей других авторов и прочего в разделе Обсуждений.