Несколько слов о вашем коде:
__iter
должно быть __iter__
- Вы возвращаете «33» в функции
__iter__
. На самом деле вы должны возвращать объект итератора . Итератор - это объект, который продолжает возвращать разные значения, когда вызывается его функция next()
(возможно, последовательность значений, например [0,1,2,3 и т. Д.]).
Вот рабочий пример итератора:
class a(object):
def __init__(self,x=10):
self.x = x
def __iter__(self):
return self
def next(self):
if self.x > 0:
self.x-=1
return self.x
else:
raise StopIteration
c=a()
for x in c:
print x
Любой объект класса a
является объектом итератора. Вызов функции __iter__
должен вернуть итератор, поэтому он возвращает сам - как вы можете видеть, класс a имеет функцию next()
, так что это объект итератора.
Когда вызывается следующая функция, она сохраняет возвращаемые последовательные значения, пока не достигнет нуля, а затем отправляет исключение StopIteration
, которое (соответственно) останавливает итерацию.
Если это кажется немного туманным, я бы предложил поэкспериментировать с кодом, а затем проверить документацию здесь: http://docs.python.org/library/stdtypes.html