为什么此Python代码不会在__hash__中造成无限循环?

丹尼伯

我是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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

循环不会在列表python中增加

来自分类Dev

为什么此代码在ARM中会陷入无限循环

来自分类Dev

为什么Python不会在__doc__中自动转义'\'?

来自分类Dev

为什么Java.lang.Process不会在此代码中引发InterruptedException?

来自分类Dev

为什么此代码无限循环?

来自分类Dev

为什么进入无限递归时,不会在JVM崩溃?

来自分类Dev

为什么“零除”不会在Dart中崩溃?

来自分类Dev

为什么此汇编代码会无限循环?

来自分类Dev

Append不会在Python中“循环”我的搜索代码

来自分类Dev

Javascript随机报价-可以,但是为什么此按钮不会在此Div中显示?

来自分类Dev

为什么我用此React代码遇到无限循环?

来自分类Dev

为什么addTarget不会在Swift中删除?

来自分类Dev

为什么我的ibjects不会在javascript中变形?

来自分类Dev

为什么在方括号中使用if不会在python中给出错误

来自分类Dev

为什么mouseDown事件不会在React中传播?

来自分类Dev

break不会在while循环中中断。为什么?

来自分类Dev

为什么它不会在python中消失此错误

来自分类Dev

为什么此Angular ui路由器代码会在$ digest中引起无限循环?

来自分类Dev

为什么此代码会陷入无限循环?

来自分类Dev

虽然循环不会在python中停止

来自分类Dev

为什么z不会在最小堆中冒泡?

来自分类Dev

为什么打印消息不会在我的C#代码中打印?

来自分类Dev

为什么我的玩家不会在python中移动

来自分类Dev

循环不会在python程序中执行

来自分类Dev

为什么这不会在 html 中折叠

来自分类Dev

为什么 JavaScript 代码不会在内容产品 wordpress 中循环

来自分类Dev

为什么这个 foreach 不会在 PHP 数组中循环?

来自分类Dev

为什么python不会在这个函数中添加

来自分类Dev

为什么while循环不会在成功时中断?

Related 相关文章

  1. 1

    循环不会在列表python中增加

  2. 2

    为什么此代码在ARM中会陷入无限循环

  3. 3

    为什么Python不会在__doc__中自动转义'\'?

  4. 4

    为什么Java.lang.Process不会在此代码中引发InterruptedException?

  5. 5

    为什么此代码无限循环?

  6. 6

    为什么进入无限递归时,不会在JVM崩溃?

  7. 7

    为什么“零除”不会在Dart中崩溃?

  8. 8

    为什么此汇编代码会无限循环?

  9. 9

    Append不会在Python中“循环”我的搜索代码

  10. 10

    Javascript随机报价-可以,但是为什么此按钮不会在此Div中显示?

  11. 11

    为什么我用此React代码遇到无限循环?

  12. 12

    为什么addTarget不会在Swift中删除?

  13. 13

    为什么我的ibjects不会在javascript中变形?

  14. 14

    为什么在方括号中使用if不会在python中给出错误

  15. 15

    为什么mouseDown事件不会在React中传播?

  16. 16

    break不会在while循环中中断。为什么?

  17. 17

    为什么它不会在python中消失此错误

  18. 18

    为什么此Angular ui路由器代码会在$ digest中引起无限循环?

  19. 19

    为什么此代码会陷入无限循环?

  20. 20

    虽然循环不会在python中停止

  21. 21

    为什么z不会在最小堆中冒泡?

  22. 22

    为什么打印消息不会在我的C#代码中打印?

  23. 23

    为什么我的玩家不会在python中移动

  24. 24

    循环不会在python程序中执行

  25. 25

    为什么这不会在 html 中折叠

  26. 26

    为什么 JavaScript 代码不会在内容产品 wordpress 中循环

  27. 27

    为什么这个 foreach 不会在 PHP 数组中循环?

  28. 28

    为什么python不会在这个函数中添加

  29. 29

    为什么while循环不会在成功时中断?

热门标签

归档