當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。