[Python-Dev] metaclass insanity

David Abrahams dave@boost-consulting.com
05 Nov 2002 09:45:30 -0500


Just van Rossum <just@letterror.com> writes:

> Alex Martelli wrote:
> 
> > class Outer:
> >     [snip snip]
> >     def __iter__(self):
> >         class Inner:
> >             def __init__(self, outer):
> >                 self.outer = outer
> >             def __iter__(self):
> >                  return self
> >             def next(self):
> >                  if self.outer.isAtEnd():
> >                     raise StopIteration
> >                  else:
> >                     result = self.outer.currentState()
> >                     self.outer.advanceState()
> >                     return result
> >         return Inner(self)
> 
> While I'm sure this was just a theoretical example, _this_ specific case is much
> easier written as a generator (and I _love_ the idiom of making the __iter__
> method a generator, I think it's underused...).
> 
> class Outer:
>     [snip snip]
>     def __iter__(self):
>         while not self.isAtEnd():
>             result = self.outer.currentState()
>             self.outer.advanceState()
>             yield result

This only works for 'self-iterable' types like files, right?

-- 
                    David Abrahams
dave@boost-consulting.com * http://www.boost-consulting.com