1

如果我有以下格式的课程:

class TestClass:
  def __init__(self):
    self.value = 0

  def getNewObject(self):
    return TestClass()

我可以调用该函数的次数是否有限制?例如:

obj = TestClass()
obj.getNewObject().getNewObject()

getNewObject()我可以调用的返回值的次数是否有限制getNewObject()?如果是这样,哪些因素会影响这一点?

4

2 回答 2

4

我对此表示怀疑。让我怀疑的一个原因是,如果我们有这个功能:

def test(obj):
    obj.getNewObject().getNewObject().getNewObject()

我们拆解它

import dis
dis.dis(test)

我们得到这个:

  2           0 LOAD_FAST                0 (obj)
              3 LOAD_ATTR                0 (getNewObject)
              6 CALL_FUNCTION            0
              9 LOAD_ATTR                0 (getNewObject)
             12 CALL_FUNCTION            0
             15 LOAD_ATTR                0 (getNewObject)
             18 CALL_FUNCTION            0
             21 POP_TOP             
             22 LOAD_CONST               0 (None)
             25 RETURN_VALUE        

这只是重复的LOAD_ATTR其次CALL_FUNCTION。我无法想象这将需要大量内存或其他资源来管理。因此,可能没有限制。

于 2012-05-31T04:57:39.500 回答
1

Python 中存在递归限制(可调整),但这无关紧要。每个调用都是在前一个调用完成后进行的,因此它们都是从堆栈帧的同一级别(即从您的用户代码)调用的。现在,您可能会遇到行长限制或其他问题,尤其是对于交互式 Python shell。

于 2012-05-31T04:57:31.997 回答