用法:
@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()))
注意
虽然这个装饰器可以轻松创建行为良好的完全有序类型,但它
does
的代价是执行速度较慢,派生比较方法的堆栈跟踪更复杂。如果性能基准测试表明这是给定应用程序的瓶颈,则实施所有六种丰富的比较方法可能会提供简单的速度提升。注意
此装饰器不会尝试覆盖已在类
or its superclasses
中声明的方法。这意味着如果超类定义了比较运算符,即使原始方法是抽象的,total_ordering
也不会再次实现它。3.2 版中的新函数。
在 3.4 版中更改:现在支持从无法识别的类型的基础比较函数返回 NotImplemented。
相关用法
- Python functools.wraps用法及代码示例
- Python functools.singledispatchmethod用法及代码示例
- Python functools.singledispatch用法及代码示例
- Python functools.partial用法及代码示例
- Python functools.partialmethod用法及代码示例
- Python functools.cache用法及代码示例
- Python functools.lru_cache用法及代码示例
- Python functools.reduce用法及代码示例
- Python functools.cached_property用法及代码示例
- Python functools.wraps()用法及代码示例
- Python dict fromkeys()用法及代码示例
- Python frexp()用法及代码示例
- Python float转exponential用法及代码示例
- Python calendar firstweekday()用法及代码示例
- Python fsum()用法及代码示例
- Python float.is_integer用法及代码示例
- Python format()用法及代码示例
- Python calendar formatmonth()用法及代码示例
- Python filecmp.cmpfiles()用法及代码示例
注:本文由纯净天空筛选整理自python.org大神的英文原创作品 functools.total_ordering。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。