Ваша структура класса уже успешно передает значение узла self
его дочернему узлу. Проблема в вашей list
функции. while l.parent is not None:
никогда не заканчивается, потому что ничто в цикле не меняет значение l
. Вызов list
рекурсивно создаст новый контекст, в котором другая переменная с именем l
будет иметь значение, отличное от значения l
первого контекста, но это не влияет на первый l
или первый цикл. Рекурсивные функции обычно не требуют фактического цикла для итерации по элементам структуры данных. Попробуйте:
def list(l):
print(l.value)
if l.parent is not None:
list(l.parent)
Или:
def list(l):
while l is not None:
print(l.value)
l = l.parent
(я рекомендую последний, потому что первый из них потерпит крах с "превышением максимальной глубины рекурсии", если в цепочке более 999 элементов)
Результат:
4
3
2
1
Совет по бонусному стилю: подумайте над тем, чтобы назвать свою функцию чем-то отличным от list
В общем, вам следует избегать перезаписи имен встроенных функций и типов.