我是 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__() 方法返回一个字符串对象,这意味着 self.__str__().__hash__() 正在调用 __hash__ 一个完全不同的类 (String) 的方法 - 因此,您实际上并没有再次调用同一个函数。这就是为什么您没有无限循环的原因。
