gpt4 book ai didi

python - 对象在字典键中不被认为是相同的 - 但实现了 __eq__

转载 作者:太空宇宙 更新时间:2023-11-03 12:20:49 25 4
gpt4 key购买 nike

以下代码给出错误信息:

    class Test(object):

def __init__(self, test = 0):
self.test = test

if __name__ == '__main__':
t1 = Test(1)
t2 = Test(2)
t3 = Test(3)
t4 = Test(1)
my_dict = {}
my_dict[t1] = 1
my_dict[t2] = 2
my_dict[t3] = 3

print(my_dict[t4])

Traceback (most recent call last):
File "C:\Users\Alexander\Documents\Visual Studio 2015\Projects\PipeProcessTest
\PipeProcessTest\DictionaryKeys.py", line 16, in <module>
print(my_dict[t4])
KeyError: <__main__.Test object at 0x0000000002F18080>

这是因为 python 将 t1 和 t4 视为不同的对象。但是,当我使用以下代码实现比较运算符“eq”时:

def __eq__(self, other):
if self.test == other.test:
return True
else:
return False

我收到另一条错误消息,“unhashable type: 'Test'”告诉我现在字典无法对 Test 对象进行哈希处理。我该如何解决这个问题,以便 Python 可以将 t1 和 t4 识别为相同,而且还能够对 Test 对象进行哈希处理?

最佳答案

除了 __eq__ 之外,您还需要实现 __hash__。参见 the documentation有关如何执行此操作的注释。要记住的主要事情是比较相等的对象必须具有相同的散列值。因此,如果您只想通过查看 test 属性来比较相等性,那么您的 __hash__ 也只需要使用 test 属性。搜索关于 __hash____eq__ 的信息也会在这个网站上出现许多以前的问题。

关于python - 对象在字典键中不被认为是相同的 - 但实现了 __eq__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32279666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com