为什么这段Python代码不会在散列中引起无休止的循环?

2024-05-05 08:36:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个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__的循环?你知道吗


Tags: 方法gtselfnodereturndefhash逻辑
1条回答
网友
1楼 · 发布于 2024-05-05 08:36:16

如果您只是从__hash__()内部调用self.__hash__(),那么肯定会有一个无休止的循环。但是,您正在调用self.__str__().__hash__()。你知道吗

__str__()方法按其倾向返回一个string对象,这意味着self.__str__().__hash__()调用的是一个完全不同的类(string)的__hash__方法,因此,实际上不再调用同一个函数。这就是为什么你没有无休止的循环。你知道吗

相关问题 更多 >