我是python newb,我只是想在这里理解逻辑:
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)
我的阅读方式是这样的:
如果尝试hash()
在SomeClass类的对象上调用函数->然后__hash__
将执行魔术方法。__hash__
方法调用__str__
method,然后__hash__
第二次调用方法的结果__str__
-> imho导致循环引用和无限循环...
有人可以向我解释-__hash__
被一遍又一遍地呼唤,这不是一个无休止的循环吗?
如果您只是self.__hash__()
从内部调用__hash__()
,那么可以肯定会有一个无限循环。但是,您正在打电话self.__str__().__hash__()
。
该__str__()
方法通常会返回一个字符串对象,这意味着self.__str__().__hash__()
正在调用__hash__
完全不同的类(String)的方法-因此,您实际上不必再次调用同一函数。这就是为什么您没有无限循环的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句