Некоторые идеи:
cur_children = self._children
пока cur_children не является None:
для ребенка в cur_children:
if child.is_current_node ():
верните True
поднять исключение (child.display_name)
cur_children = cur_children._children
Я предполагаю, что self._children
содержит несколько детей: [A, B, C]
Затем, в первом цикле, это займет A
. Предположим, что у A
есть эти дети: [AA, AB, AC
].
Теперь вы делаете это: cur_children = cur_children._children
. Это означает, что теперь вместо продолжения с B
из начального [A, B, C]
оно продолжится с AA
и так далее.
В этом примере оно никогда не достигнет B
. Это предназначено?
Что содержит ваш is_current_node()
? Возможно, вы забыли вернуть значение, поэтому результат всегда равен None
и bool(None) == False
.
Другая идея: (рекурсия)
def is_active(self):
def check_children(children):
for child in children:
if child.is_current_node():
return True
else:
if children._children:
return check_children(children._children)
return False
if self.is_current_node():
return True
return check_children(children)