gpt4 book ai didi

python - 为什么这段 Python 代码不会在 __hash__ 中导致死循环?

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:13 25 4
gpt4 key购买 nike

我是 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) 的方法 - 因此,您实际上并没有再次调用同一个函数。这就是为什么您没有无限循环的原因。

关于python - 为什么这段 Python 代码不会在 __hash__ 中导致死循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24738716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com