MST
星途 面试题库

面试题:Python字典键类型限制下的应用场景分析

假设你正在开发一个程序,需要将一些自定义的类实例作为字典的键。为了确保这些实例能正确作为键使用,在类的设计上需要注意哪些方面?请详细说明并给出实现示例。
21.5万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 注意方面
    • 重写__hash__方法__hash__方法应返回一个不可变的哈希值,且对于相等的实例,哈希值必须相同。这是因为字典在查找键时首先通过哈希值来定位存储位置。
    • 重写__eq__方法__eq__方法用于定义两个实例相等的逻辑。当两个实例通过__eq__比较相等时,它们的哈希值也必须相等。
  2. 实现示例
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的实例就可以正确地作为字典的键使用。