Python,当在一个新类中重写_eq__;()时,奇怪的事情发生了
我想在新的a类中覆盖eq,代码如下:Python,当在一个新类中重写_eq__;()时,奇怪的事情发生了,python,Python,我想在新的a类中覆盖eq,代码如下: >>> class A(object): ... def __eq__(self, obj): ... return True ... >>> a = A() >>> b = A() >>> L = [0, 0, a, 1] >>> L.index(a) 0 >>> L.index(0) 0 >>
>>> class A(object):
... def __eq__(self, obj):
... return True
...
>>> a = A()
>>> b = A()
>>> L = [0, 0, a, 1]
>>> L.index(a)
0
>>> L.index(0)
0
>>> L.index(100)
2
>>> L.index(1)
2
很难理解这是怎么发生的。让我们从逻辑上假设
index()
在列表L
中按顺序工作,从最低索引到最高索引,当它第一次遇到元素的True
比较时停止
>>> L.index(a)
a==0
是第一个True
匹配项,因此匹配L
的第一个元素
>>> L.index(0)
>>> L.index(100)
>>> L.index(1)
0==0
是第一个True
匹配项,因此匹配L
的第一个元素
>>> L.index(0)
>>> L.index(100)
>>> L.index(1)
100==a
是第一个True
匹配项,因此匹配L
的第三个元素
>>> L.index(0)
>>> L.index(100)
>>> L.index(1)
1==a
是第一个True
匹配项,因此匹配L
的第三个元素,您不了解哪个部分/结果?当与a
进行比较时,您总是会得到正确答案。为什么L.index(1)和L.index(100)返回2?很酷,我理解。Thx\uuuu eq\uuuuuu
从本质上讲必须双向工作。也许这让你感到困惑(a==100
也意味着100==a
)。@Evert这是不正确的。查看其中的x==y
但是y!=x
。相等比较(使用==
)调用左侧对象的方法。如果失败(在本例中,int
的\uuuu eq\uuuu
不能用于比较A
类型的对象),它将调用并尝试调用右侧对象的\uu eq\uuu
。@MarkusMeskanen;我没有意识到,尽管other
参数是一个赠品。
>>> L.index(0)
>>> L.index(100)
>>> L.index(1)