Как реализовать рекурсивную печать вложенных объектов в python? - PullRequest
0 голосов
/ 11 февраля 2012

Я пытаюсь выучить python и не знаю, почему последнее утверждение приводит к бесконечному рекурсивному вызову. Может кто-нибудь объяснить

class Container:
    tag = 'container'
    children = []

    def add(self,child):
        self.children.append(child)

    def __str__(self):
        result = '<'+self.tag+'>'
        for child in self.children:
            result += str(child)
        result += '<'+self.tag+'/>'
        return result

class SubContainer(Container):
    tag = 'sub'

c = Container()
d = SubContainer()
c.add(d)
print(c)

1 Ответ

8 голосов
/ 11 февраля 2012

Поскольку вы не назначаете self.children, поле children совместно используется всеми экземплярами Container.

Вы должны удалить children = [] и создать его в __init__ вместо:

class Container:
    tag = 'container'

    def __init__(self):
        self.children = []
[...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...