Ваш атрибут Iterator
всегда будет None
, потому что вы останавливаете итерацию, как только произойдет первый вызов next .Думайте о next как о том, что он вызывается для каждого элемента, пока нет больше элементов для обработки, из документации Python о __next__
:
Верните следующий элемент из контейнера.Если больше нет предметов, выведите исключение StopIteration
Единственное, что вы можете сделать, это инициализировать self.Iterator
длиной стека (в __iter__
), затем на каждом шаге уменьшать его доВы достигаете 0 (а затем повышаете StopItate):
def __iter__(self):
self.Iterator = len(self.stack) - 1 # initialize to the index of the last element
return self
def __next__(self):
if self.Iterator >= 0:
current_value = self.stack[self.Iterator]
self.Iterator = self.Iterator - 1 # update for the next step
return current_value
else: # stop if self.Iterator is -1
raise StopIteration