functools.total_ordering
@functools.total_ordering
Дает для класса, определяющего один или несколько методов упорядочения с расширенными возможностями сравнения, этот декоратор класса предоставляет все остальное. Это упрощает работу по указанию всех возможных операций расширенного сравнения:
Класс должен определять одно из __lt__()
, __le__()
, __gt__()
или __ge__()
. Кроме того, класс должен предоставлять метод __eq__()
.
Например:
@total_ordering
class Student:
def _is_valid_operand(self, other):
return (hasattr(other, "lastname") and
hasattr(other, "firstname"))
def __eq__(self, other):
if not self._is_valid_operand(other):
return NotImplemented
return ((self.lastname.lower(), self.firstname.lower()) ==
(other.lastname.lower(), other.firstname.lower()))
def __lt__(self, other):
if not self._is_valid_operand(other):
return NotImplemented
return ((self.lastname.lower(), self.firstname.lower()) <
(other.lastname.lower(), other.firstname.lower()))
Новое в версии 3.2.
Изменено в версии 3.4: теперь поддерживается возврат NotImplemented из базовой функции сравнения для нераспознанных типов.
Last updated
Was this helpful?