- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我设法在 Python 3.4 和 3.7 上重现了这一点。
考虑:
class Comparable:
def _key(self):
raise NotImplementedError
def __hash__(self):
return hash(self._key())
def __eq__(self, other):
...
def __lt__(self, other):
...
class A(Comparable): pass
class B(A):
def __str__(self):
return "d"
def __eq__(self, other):
return isinstance(self, type(other))
def _key(self):
return str(self),
b = B()
很明显,人们会期望 b.__hash__
在这里定义,因为它是在 Comparable
下定义的,B
是 B
的子类。
瞧,它已被定义,但计算结果为 None
。给了什么?
>> b
<__main__.B object at 0x00000183C9734978>
>> '__hash__' in dir(b)
True
>> b.__hash__
>> b.__hash__ is None
True
>> B.__mro__
(<class '__main__.B'>, <class '__main__.A'>, <class '__main__.Comparable'>, <class 'object'>)
>> isinstance(b, Comparable)
True
如果在 Comparable
和 A
中将 __init__
实现为 super().__init__()
,则会重现相同的行为>.
最佳答案
在 the docs 中找到它:
A class that overrides
__eq__()
and does not define__hash__()
will have its__hash__()
implicitly set to None.
和
If a class that overrides
__eq__()
needs to retain the implementation of__hash__()
from a parent class, the interpreter must be told this explicitly by setting__hash__ = <ParentClass>.__hash__
来自工单 1549 :
This was done intentionally -- if you define a comparison without defining a hash, the default hash will not match your comparison, and your objects will misbehave when used as dictionary keys.
(圭多范罗森)
关于python - 继承 - __hash__ 在子类中设置为 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53518981/
我有一个类,我想为这个类写一个__hash__()方法。我要编写的方法在某些情况下会返回对象的默认散列,而在其他一些情况下会返回其属性之一的散列。所以,作为一个简单的测试用例: class Foo:
我有一个类(class)叫 Transaction ,其中包含多个属性。如果这些属性中的任何一个匹配,那么我希望将这些事务视为重复事务,因此不想在集合中存储重复项。 class Transaction
假设我写了一个类,但没有为它定义一个__hash__。然后__hash__(self)默认为id(self)(self的内存地址),根据the documentation . 但是我没有在文档中看到这
我正在尝试为字符串创建自定义哈希函数。我想按权重按字符频率对字符串进行哈希处理。这样 hi 和 ih 将产生相同的散列。我可以覆盖 __hash__ 吗? 或者创建一个包含字符串并覆盖 __hash_
假设我有一些 Person 实体,我想知道其中一个是否在列表中: person in people? 我不关心“对象的 ID”是什么,只关心它们的属性是否相同。所以我把它放在我的基类中: # valu
在 Python 文档中,我们可以阅读有关 __hash__ 函数的内容: The only required property is that objects which compare equal
我在正确散列我的对象时遇到了问题。考虑以下代码: class Foo: def __init__(self, bar): self.keys = list(bar.keys()
有没有办法给js自定义哈希中的对象,就像重写一样 __hash__() 在 python 中,让我们定义如何将给定对象散列到字典中。 我的基本问题是:使用什么哈希函数将 js 对象放入关联数组中,我可
我刚刚在 Python3 中观察到 Set 的一个有趣行为,我想知道为什么。 给定类: class Tab: @staticmethod def set(size):
给定: class T: def __hash__(self): return 1234 t1 = T() t2 = T() my_set = { t1 } 我希望以下内容打印
编辑:正如@BrenBarn 指出的那样,原文没有意义。 给定一个字典列表(由 csv.DictReader 提供——它们都有 str 键和值)最好通过全部填充来删除重复项在一个集合中,但这不能直接完
我所做的显然不是人们想要做的事情,相反,我只是在测试为给定类实现 __hash__。 我想看看是否向字典添加一个虚假的“可散列”类,然后更改它的散列值会导致它无法访问它。 我的类(class)是这样的
这个问题在这里已经有了答案: add object into python's set collection and determine by object's attribute (1 个回答)
实现__hash__()的正确好方法是什么? 我说的是返回哈希码的函数,该哈希码随后用于将对象插入哈希表(也称为字典)中。 由于 __hash__() 返回一个整数并用于将对象“分箱”到哈希表中,我假
在 Python 中,我知道 __hash__ 为给定对象返回的值在该对象的生命周期内应该是相同的。但是,出于好奇,如果不是,会发生什么?这会造成什么样的破坏? class BadIdea(objec
我有一个名为 WeakBoundMethod 的类(codereview.se 上的 source)。我想要一些关于我应该如何实现的指南 __hash__() .此外,Python 3 自动提供了 _
我希望这可行(在 Python 3.6 中), class A: __hash__ = id A().__hash__() 但我明白了 TypeError: id() takes exactl
以下将起作用,但我宁愿不需要重复 __hash__在每个子类中。有没有办法告诉数据类继承哈希函数(即不将其设置为 None )? from dataclasses import dataclass @
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
我正在尝试理解我目前正在处理的一段代码(它的 pacman)。 我在 Python 中有以下二维数组: self.data = [[initialValue for y in range(height
我是一名优秀的程序员,十分优秀!