如何从内部声明Class实例

时间:2017-09-19 01:08:35

标签: python

我想从自己的方法中声明Item类实例。 但是代码提出了RuntimeError: maximum recursion depth exceeded。 导致错误的原因以及我们应该知道什么来避免错误?

class Item(object):
    def __init__(self, arg):
        self.arg = arg    
        self.outputs = []    
        for i in range(5):
            item = Item('Child Item %s' % i)
            self.outputs.append(item)

item = Item('Root item')

3 个答案:

答案 0 :(得分:2)

问题看起来像是因为你在构造函数中这样做会导致你的对象无限地继续创建它自己。

您必须为您的程序实施一些解决方案,以了解它何时可以停止创建其他子项。

答案 1 :(得分:1)

你在这里所做的事情似乎有些不对劲,我鼓励你提出另一个问题,关于你实际想要实现的事实。

但这是迫使其发挥作用的一种方法。我不建议实际这样做。

class Item(object):
    def __init__(self, arg):
        self.arg = arg    
        self.outputs = []    
        for i in range(5):
            item = Item.__new__(Item, 'Child Item %s' % i)
            item.arg = i
            self.outputs.append(item)

item = Item('Root item')

请注意,子实例不具有child.outputs属性。他们应该吗?如果是这样,那应该是什么......?如果没有,他们真的真的Item实例......?

答案 2 :(得分:0)

不要从自己的Item方法内部声明__init__类实例。以下是许多可能的解决方案之一:

class Item(object):
    def __init__(self, name):
        self.name = name
        self.children = None

    def getChildren(self):
        if self.children is None:
            self.children = [Item('Child Item %s' % i) for i in range(5)]
        return self.children

item = Item('Root item')
print item.getChildren()