Python中按size属性比较对象的__lt__运算符实现正确性咨询
问题分析
你写的__lt__方法存在两个核心错误,导致不符合预期:
- 字符串比较逻辑和实际大小顺序相反:Python字符串按ASCII码逐位比较,
'big' < 'medium' < 'small',和你预期的尺寸大小顺序完全相反。比如self.size是small、other.size是big时,other.size > self.size实际返回False,但你需要的small < big应该返回True,结果完全倒置。 - 分支覆盖不全:你只处理了
self尺寸 < other尺寸的三种正向场景,剩下的所有场景(比如self是big、other是small,二者尺寸相等,self是medium、other是small等)都会返回None,Python在比较运算中收到None会直接抛出TypeError异常,完全无法正常运行。
修复方案
最简洁的实现是先给尺寸定义优先级映射,直接比较优先级数值即可,覆盖所有场景:
def __lt__(self, other): size_order = {"small": 1, "medium": 2, "big": 3} return size_order[self.size] < size_order[other.size]
如果要兼容不存在的尺寸值,可以额外加判断逻辑,返回NotImplemented避免异常。
内容的提问来源于stack exchange,提问作者basketballer13
相关产品推荐
相关产品推荐

