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