如果我有以下格式的课程:
class TestClass:
def __init__(self):
self.value = 0
def getNewObject(self):
return TestClass()
我可以调用该函数的次数是否有限制?例如:
obj = TestClass()
obj.getNewObject().getNewObject()
我可以在getNewObject()
的返回值上调用getNewObject()
的次数有限制吗?如果是这样,哪些因素会影响这个?
答案 0 :(得分: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
的重复。我无法想象这需要很多内存或其他资源来管理。因此,可能没有限制。
答案 1 :(得分:1)
Python中有一个递归限制(可调),但这是无关的。每次调用都是在前一次调用完成后进行的,因此它们都是从堆栈帧的相同级别(即来自您的用户代码)调用的。现在,您可能会遇到行长限制或某些内容,尤其是对于交互式Python shell。