不完整的排序¶
ID: py/incomplete-ordering
Kind: problem
Security severity:
Severity: warning
Precision: very-high
Tags:
- reliability
- correctness
Query suites:
- python-security-and-quality.qls
实现排序运算符(__lt__
、__gt__
、__le__
或 __ge__
)的类应该实现所有四个运算符,以确保两个对象之间的排序一致,并遵循通常的数学规则。如果排序与默认相等不一致,则还应实现 __eq__
和 __ne__
。
建议¶
确保实现所有四个排序比较,如果需要,还应实现 __eq__
和 __ne__
。
无需手动实现所有四个比较,可以使用 functools.total_ordering
类装饰器。
示例¶
在此示例中,仅实现了 __lt__
运算符,这可能导致不一致的行为。应实现 __gt__
、__le__
、__ge__
,在本例中,还应实现 __eq__
和 __ne__
。
class IncompleteOrdering(object):
def __init__(self, i):
self.i = i
def __lt__(self, other):
return self.i < other.i
参考¶
Python 语言参考:Python 中的丰富比较.