不完整的排序¶
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 中的丰富比较.