我是一个python新手,我只是想理解逻辑here:
class SomeClass:
#...
def __hash__(self):
return self.__str__().__hash__()
def __str__(self):
arr = []
if self.final:
arr.append("1")
else:
arr.append("0")
for (label, node) in self.edges.iteritems():
arr.append( label )
arr.append( str( node.id ) )
return "_".join(arr)
#...
someObj = SomeClass()
hash(someObj)
我是这样读的:
如果我尝试调用类SomeClass->;的对象上的hash()
函数,那么__hash__
魔术方法将被执行。__hash__
方法调用__str__
方法,然后对__str__
方法的结果第二次调用__hash__
方法->;这会导致循环引用和无休止的循环。。。你知道吗
有人能向我解释一下吗?为什么这不是一个不断重复调用__hash__
的循环?你知道吗
如果您只是从
__hash__()
内部调用self.__hash__()
,那么肯定会有一个无休止的循环。但是,您正在调用self.__str__().__hash__()
。你知道吗__str__()
方法按其倾向返回一个string对象,这意味着self.__str__().__hash__()
调用的是一个完全不同的类(string)的__hash__
方法,因此,实际上不再调用同一个函数。这就是为什么你没有无休止的循环。你知道吗相关问题 更多 >
编程相关推荐