Python自定义List类__eq__方法始终返回False的原因排查
修复你的List类__eq__方法问题
嘿,我来帮你搞定这个__eq__方法总是返回False的问题~
首先得说,你现在的__eq__实现有两个关键问题:
- 你把
self.array和other直接比较,但other应该是另一个List类的实例,不是数组对象,所以数组和List实例对比肯定不相等,直接返回False。 - 就算你改成对比两个实例的
array属性,也不对——因为你的数组是有预设容量的,比如一个List的max_capacity是50,另一个是100,哪怕它们实际存储的元素完全一样,整个数组对比也会因为后面的空元素/容量差异返回False,但我们的List应该只关心实际存储的元素,也就是前count个值。
给你修改后的__eq__方法,完全符合预期:
def __eq__(self, other): # 先判断对方是不是同类型的List实例,不是的话直接不相等 if not isinstance(other, List): return False # 如果两个List的元素数量不一样,肯定不相等 if self.count != other.count: return False # 逐个对比每个实际存储的元素 for i in range(self.count): if self.array[i] != other.array[i]: return False # 所有检查都通过,说明两个List相等 return True
为啥这个版本能行?
- 类型检查:先确保
other是List类的实例,避免和其他类型(比如原生list、字符串)对比时出错。 - 数量校验:如果两个List的元素数量不同,直接返回False,没必要继续对比。
- 元素逐个对比:只对比前
count个元素,忽略数组中未使用的容量部分——这才符合我们对“列表相等”的定义:元素顺序、值完全一致,和底层数组的容量无关。
举个例子,你现在创建两个容量不同但元素相同的List:
list_a = List(max_capacity=50) list_a.append(10) list_a.append(20) list_b = List(max_capacity=100) list_b.append(10) list_b.append(20)
用修改后的方法对比list_a == list_b会返回True,这才是正确的结果~
内容的提问来源于stack exchange,提问作者Sook Lim
相关产品推荐
相关产品推荐

