Python-在_散列方法定义中使用默认的_散列方法

Python-在_散列方法定义中使用默认的_散列方法,python,methods,hash,magic-methods,Python,Methods,Hash,Magic Methods,我有一个类,我想为这个类编写一个\uuuuuuuuuuuuuuuuu散列()方法。我要编写的方法在某些情况下将返回对象的默认哈希值,在某些情况下将返回其属性之一的哈希值。因此,作为一个简单的测试用例: class Foo: def __init__(self, bar): self.bar = bar def __hash__(self): if self.bar < 10: return hash(self) # &

我有一个类,我想为这个类编写一个
\uuuuuuuuuuuuuuuuu散列()
方法。我要编写的方法在某些情况下将返回对象的默认哈希值,在某些情况下将返回其属性之一的哈希值。因此,作为一个简单的测试用例:

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)
Foo类:
def ____;初始(自,条形):
self.bar=bar
定义散列(自我):
如果self.bar<10:

返回hash(self)#调用父实现使用:

super(Foo, self).__hash__()
我还想到可以将其重写为
return
对象。哈希(self)
。这是可行的,但更糟糕的是,它很特别 方法不打算直接调用


您正在重写一个magic方法,因此可以直接调用父对象的实现。

这是比
对象更好的形式吗?\uuuu hash(self)
方法?在这种情况下也是一样的。顺便说一句,你在使用python 3吗?如果没有,您应该拥有
Foo
对象的子类
object
。在这种情况下,直接调用特殊方法是可以的。具体地说,当重写一个特殊方法时,直接调用该方法的超类实现通常是合适的。