- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类,我想为这个类写一个__hash__()
方法。我要编写的方法在某些情况下会返回对象的默认散列,而在其他一些情况下会返回其属性之一的散列。所以,作为一个简单的测试用例:
class Foo:
def __init__(self, bar):
self.bar = bar
def __hash__(self):
if self.bar < 10:
return hash(self) # <- this line doesn't work
else:
return hash(self.bar)
问题在于 hash(self)
只是调用 self.__hash__()
,导致无限递归。
我收集到一个对象的散列是基于该对象的 id()
,所以我可以将 return hash(self)
重写为 return id(self)
,或 return id(self)/16
,但在我自己的代码中重新创建默认实现对我来说似乎是一种不好的形式。
我还想到我可以将其重写为return object.__hash__(self)
。这行得通,但似乎更糟,因为不打算直接调用特殊方法。
所以,我要问的是;有没有一种方法可以在不隐式调用该对象所属类的 __hash__()
方法的情况下使用对象的默认哈希值?
最佳答案
调用父实现使用:
super(Foo, self).__hash__()
It also occurred to me that I could rewrite it as
return
. This works, but seems even worse, as special methods are not intended to be called directly.
object.__hash__(self)
你重写了一个魔术方法,所以直接调用父类的实现是可以的。
关于Python - 在 __hash__ 方法定义中使用默认的 __hash__ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11716258/
我有一个类,我想为这个类写一个__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
我是一名优秀的程序员,十分优秀!