[Python-Dev] Re: Single- vs. Multi-pass iterability
François Pinard
pinard@iro.umontreal.ca
09 Jul 2002 08:14:38 -0400
[Oren Tirosh]
> class ifile(file):
> def __iter__(self):
> return self
> def next(self):
> s = self.readline()
> if s:
> return s
> raise StopIteration
> class xfile:
> def __init__(self, filename):
> self.filename = filename
> def __iter__(self):
> return ifile(self.filename)
> This pair of objects has a proper container/iterator relationship.
This is all clear to me, except for one little thing. I wonder why class
`ifile' has an `__iter__' method itself. I know it is said to be the
"iterator protocol", and I wonder why it has to be.
My understanding is that `__iter__' returns an iterator all ready to be
enquired a number of times through `.next()' calls, and I presume that
if any re-initialisation has to take place, it is within `__iter__'.
However, as the iterator maintains its own progressive state, I do not see
the intent and purpose of the iterator having an `__iter__' method itself.
Would it make sense using the iterator `__iter__' as the preferred place
where it re-initialises itself?
--
François Pinard http://www.iro.umontreal.ca/~pinard