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
На заметку
В соответствующем разделе вы можете зарегистрировать сообщество по интересам, чтобы о нём узнали и другие посетители сайта — возможно, так вы отыщите новых единомышленников и друзей.. И не важно виртуальное оно, или вполне реальное, давно существующее, или только-только придуманное.