面试题答案
一键面试- 注意方面:
- 重写
__hash__
方法:__hash__
方法应返回一个不可变的哈希值,且对于相等的实例,哈希值必须相同。这是因为字典在查找键时首先通过哈希值来定位存储位置。 - 重写
__eq__
方法:__eq__
方法用于定义两个实例相等的逻辑。当两个实例通过__eq__
比较相等时,它们的哈希值也必须相等。
- 重写
- 实现示例:
class MyClass:
def __init__(self, value):
self.value = value
def __hash__(self):
return hash(self.value)
def __eq__(self, other):
if isinstance(other, MyClass):
return self.value == other.value
return False
# 使用示例
obj1 = MyClass(10)
obj2 = MyClass(10)
my_dict = {}
my_dict[obj1] = "Value for obj1"
print(my_dict[obj2]) # 输出 "Value for obj1",因为 obj1 和 obj2 相等
在上述示例中,MyClass
类重写了__hash__
方法,通过对self.value
取哈希值来生成实例的哈希值,并且重写了__eq__
方法来定义实例相等的逻辑。这样MyClass
的实例就可以正确地作为字典的键使用。