我在我的程序中追踪到一个错误,我正在测试对象列表中是否存在一个对象。该行始终返回 False,这意味着该对象不在列表中。事实上,它一直在发生,即使我执行了以下操作也是如此:
class myObject(object):
__slots__=('mySlot')
def __init__(self,myArgument):
self.mySlot=myArgument
print(myObject(0)==myObject(0)) # prints False
a=0
print(myObject(a)==myObject(a)) # prints False
a=myObject(a)
print(a==a) # prints True
我以前使用过 deepcopy,但我对 Python 的经验还不够丰富,不知道什么时候需要,什么时候不需要,或者机械上有什么区别。我也听说过酸洗,但从未使用过。有人可以向我解释这里发生了什么吗?
哦,还有一件事。线路
if x in myIterable:
可能测试 x 和 myIterable 中每个元素之间的相等性,对吗?那么,如果我可以改变两个对象之间的感知平等,我可以修改那条线的输出吗?是否有内置的以及所有其他内联运算符?
最佳答案
它将第二个操作数传递给
__eq__()
第一种方法。不正确。它将第一个操作数传递给
__contains__()
第二个方法,或者如果不存在这样的方法,则迭代第二个执行相等比较。
也许您打算使用 is
,它比较identity 而不是相等性。
关于python - Python 如何建立对象之间的相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8998099/