Простой способ - специальный метод __repr__
делегирует реальную обработку рекурсивному методу.Чтобы избежать беспорядка в интерфейсе, этот метод может иметь имя, начинающееся с подчеркивания (_
).Код может быть:
class Node(object):
def __init__(self, data):
self.data = data
self.parent = None
self.children = []
def add_child(self, obj):
self.children.append(obj)
obj.parent = self.data
def __repr__(self):
return self._do_repr(0)
def _do_repr(self, indent_increase):
indent = " "
print_data = (indent * indent_increase) + "Node " + str(self.data)
if self.children:
print_data += " ↴" + "\n"
for child in self.children:
print_data += child._do_repr(indent_increase + 1)
else:
print_data += '\n'
return print_data
Это дает, как и ожидалось:
Node 1 ↴
Node 2
Node 3 ↴
Node 4
Node 5