如何在Python 3中将自定义类型的实例(即用户编写的类)转换为dict键?
考虑以下代码,其中一个类有一个变量,应该定义实例是否相似:
class MyClass:
def __init__(self, x):
self.x = x
d = {MyClass(1): 1}
assert d[MyClass(1)] == 1
断言失败,因为两个不同的MyClass实例不会解析为相同的dict键,即使它们是相似的。
答案 0 :(得分:1)
要使自定义类型可用作dict键,必须定义__hash__
和__eq__
。我不知道这是否记录在案,我至少找不到任何定义,但我已经被非正式地告知了:
class MyClass:
def __init__(self, x):
self.x = x
def __hash__(self):
return hash(self.x)
def __eq__(self, rhs):
return rhs.x == self.x
d = {MyClass(1): 1}
assert d[MyClass(1)] == 1