2015-12-27 5 views
0

Im пытается создать класс итератора, который даст мне путь, бросает древовидный график, который на каждой итерации возвращает следующий шаг в соответствии с определенными условиями.Как использовать класс итератора?

Так я посмотрел, как сделать это здесь: Build a Basic Python Iterator

и это то, что я написал до сих пор:

def travel_path_iterator(self, article_name): 
    return Path_Iter(article_name) 


class Path_Iter: 

    def __init__(self,article): 
     self.article=article 

    def __iter__(self): 
     return next(self) 

    def __next__(self): 
     answer= self.article.get_max_out_nb() 
     if answer != self.article.get_name(): 
      return answer 
     else: 
      raise StopIteration 

Но у меня есть проблема, чтобы назвать этот класс. мой выход всегда:

<__main__.Path_Iter object at 0x7fe94049fc50> 

любые предположения, что им делать неправильно?

+1

Какой выход? Ваш код ничего не выводит. – ppperry

+0

Ваш '__next__'-метод выглядит странно. Получает ли 'get_max_out_nb' следующий ответ каждый раз? – Daniel

+0

Было бы проще написать функцию генератора, дающую значения. –

ответ

2

Хотя Path_Iter уже итератор, то __iter__ -метод должен вернуть self:

def __iter__(self): 
    return self 

Далее, чтобы перебирать итератор, вам нужно какое-то цикл. Например. Для печати содержимого, вы можете конвертировать итератор в список:

print list(xyz.travel_path_iterator(article_name)) 
+0

Я пишу это в классе итератора или в функции? нет необходимости рекурсии? – limitless

+0

какая рекурсия? – Daniel

+0

где мне нужно распечатать список (xyz.travel_path_iterator (article_name))? в классе PathIter? – limitless

0

Использование функции генератора:

def travel_path_generator(article): 
    while True: 
     answer = article.get_max_out_nb() 
     if answer == article.get_name() 
      break 
     else: 
      yield answer