当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python 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()))

注意

虽然这个装饰器可以轻松创建行为良好的完全有序类型,但它does 的代价是执行速度较慢,派生比较方法的堆栈跟踪更复杂。如果性能基准测试表明这是给定应用程序的瓶颈,则实施所有六种丰富的比较方法可能会提供简单的速度提升。

注意

此装饰器不会尝试覆盖已在类 or its superclasses 中声明的方法。这意味着如果超类定义了比较运算符,即使原始方法是抽象的,total_ordering 也不会再次实现它。

3.2 版中的新函数。

在 3.4 版中更改:现在支持从无法识别的类型的基础比较函数返回 NotImplemented。

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 functools.total_ordering。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。