我的问题可能最容易在代码中看到。我想做以下
class A():
def __init__(self, i):
self.i = i
if i > 0:
self.a = A(i-1)
我的想法是我想创建一个类型A的类,它可以递归地调用它自己的构造函数。如果我编写上面的代码并尝试创建A的实例,我得到以下内容:
a = Test(3)
---> self.a = A(i-1)
NameError: global name 'A' is not defined
是否有可能有一个递归调用自己的构造函数的类?如果是这样,它是如何完成的?
答案 0 :(得分:4)
当我a = A(3)
时,似乎对我有用,为什么你的a = Test(3)
?我猜这是问题,如果你为你的班级Test
命名,那么你应该使用self.a = Test(i-1)
。
>>> class A():
... def __init__(self, i):
... self.i = i
... if i > 0:
... self.a = A(i-1)
...
>>> a = A(3)
>>> a.i
3
>>> a.a.i
2
>>> a.a.a.i
1
>>> a.a.a.a.a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: A instance has no attribute 'a'
答案 1 :(得分:3)
以递归方式调用“构造函数”(实际上是初始值设定项;请参阅here):
class A():
def __init__(self, i):
self.i = i
if i > 0:
self.__init__(i-1)
但我怀疑这不是你打算做的。您的示例代码以递归方式创建类型A
的实例并将它们存储在彼此中。