抽象类的哈希可散列性

Hashability of Abstract Classes

提问人:LateGameLank 提问时间:11/17/2023 更新时间:11/17/2023 访问量:25

问:

我正在上一门关于 Python 的大学入门课程,我们刚刚开始讨论 OOP。同时,我们正在讨论哈希性。根据定义,如果一个对象具有已定义的方法,并且定义了任何两个相等的对象必须具有相同的哈希值,则该对象是可哈希的。给定这些简单条件,假设我们定义了以下类:__hash____eq__Toy

Class Toy:
    def __init__(self, values):
       self._elems = []

    def increase(self, value):
       self._elems.append(value)
    
    def __eq__(self, other):
       return self._elems == other._elems

    def __hash__(self):
       return id(self)

虽然我的教科书断言这个类是可散列的,但我不明白这怎么可能。例如,我可以假设修改两个预先存在的对象,使它们的属性相同。因此,当比较相等时,这两个对象将被视为相等。但是,这两个对象必然具有不同的值;那么,它们怎么可能返回相同的哈希值呢?Toy_elemsid

python oop 哈希

评论

2赞 user2357112 11/17/2023
是的,那个班级只是坏了。
3赞 Nick ODell 11/17/2023
我不认为教科书的例子有意义。例如,此类不能以合理的方式作为字典中的键工作。
0赞 Frank Yellin 11/17/2023
根据您给我们的定义,该类是不可哈希的。两个彼此为 == 的玩具不能保证具有相同的哈希值。(为什么你的方法接受一个论点,然后忽略它。?__init__values

答: 暂无答案