Python类定义中==正常但!=运算符报错的问题排查
问题分析与修复方案
嘿,这个小错误其实很好定位!你在__ne__方法里调用__eq__的时候多传了一个参数,直接导致了类型错误。
错误原因
你看,__eq__是类的实例方法,它的定义是def __eq__(self, other)——第一个参数self是Python自动传入的当前实例。而你在__ne__里写的是:
return not self.__eq__(self, other)
这相当于手动把self又传了一次,加上Python自动传入的self,__eq__一共收到了3个参数(自动的self + 你传的self + other),但它只接受2个参数,所以就抛出了TypeError。
修复方法
只需要去掉__eq__调用里多余的self参数就行:
def __ne__(self, other): """ != comparison method.""" return not self.__eq__(other)
更简洁的写法(推荐)
其实在Python 3里,如果你已经定义了__eq__,解释器会自动帮你实现__ne__,逻辑就是对__eq__的结果取反。所以你完全可以删掉整个__ne__方法,代码会更简洁,而且不会出错。
修复后再测试:
D1 = Dummy(1, 2, 3) D2 = Dummy(1, 4, 5) print(D1 == D2) # 输出 False,符合预期 print(D1 != D2) # 输出 True,正常工作
内容的提问来源于stack exchange,提问作者Mathieu
相关产品推荐
相关产品推荐

