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
。在这种情况下,直接调用特殊方法是可以的。具体地说,当重写一个特殊方法时,直接调用该方法的超类实现通常是合适的。