Reread Russel Blau post he is spot on with his comments: Russel Blau wrote: >I don't get that from the passage quoted, at all, although it is somewhat >opaque. It says that your __iter__() method must *return an object* with a >next() method; your __iter__() method below doesn't return such an object, >but instead returns a string. It then says that *if* your class defines >next(), which yours doesn't, __iter__() can return self. > >[spaces inserted; you should note that many newsreaders strip the TAB >character...] > >> class R: >> def __init__(self, d): >> self.d=d >> self.i=len(d) >> def __iter__(self): >> if self.i == 0: >> raise StopIteration >> self.i -= 1 >> return self.d[self.i]
>Solution: replace "__iter__" with "next" in the class definition above, >then add to the end: >> def __iter__(self): >> return self That works exactly as advertised. py> s = R('54645656') ... s.next() '6' ... s.next() '5' ... s.next() '6' ... s.next() '5' ... s.next() '4' .. s.next() '6' ... s.next() '4' ... s.next() '5' ... s.next() Traceback (most recent call last): File "<input>", line 1, in ? File "<input>", line 7, in next StopIteration And the other posters showed you how to create an iterator without a next() . Other than having no next() method they still work the same. -- http://mail.python.org/mailman/listinfo/python-list