2017-02-21 102 views
1

Я реализует алгоритм поиска (BFS) и имеет следующий Node класс:Как написать __iter__ для итерации от листового узла до корня?

class Node: 
    def __init__(self, state=None, action=None, path_cost=None, parent=None): 
     self._state = state 
     self._action = action 
     self._path_cost = path_cost 
     self._parent = parent 

Мой BFS решатель возвращает узел решения (ребенок). С помощью этого узла можно затем, например, рассчитать общую стоимость пути следующим образом (этот код является частью другого Summary класса):

def path_cost(self): 
     self._cost = self._node.path_cost 
     node = self._node.parent 
     while node: 
      self._cost += node.path_cost 
      node = node.parent 

     return self._cost 

Есть ли лучший способ сделать это путем создания пользовательского __iter__ метода в Node?

ответ

2

Что-то вроде этой функции генератора будет работать:

class Node: 
    def __iter__(self): 
     node = self 
     while node: 
      yield node 
      node = node._parent 

# elsewhere 
cost = sum(n.path_cost for n in self._node) 
    # .... 
+0

Цените свой ответ. Хотя я вижу, как это работает, мой конкретный вопрос заключается в том, может ли '__iter__' использоваться для решения проблемы? Если нет, мне нужно узнать, почему нет. –

+0

Обновлено. Сам '__iter__' может быть функцией генератора. – schwobaseggl

+0

Сладкий, это работает! Спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^