Just van Rossum wrote:
> Iterator:
> - heeft een .next() method die het volgende ding returnt, of
>   StopIteration raised als er geen volgend ding is.
> - heeft een __next__() method die self returnt (waarmee elke iterator
>   dus gelijk ook een iterable is).
> 
> Jouw class was geen iterator, want de .next() method returnde niet "het
> volgende item" en de __next__ method returnde niet self. Het was wel een
> iterable, dus het werkte wel in de context van een for loop.

En om het nog wat verder te verwarren: je bedoelt waarschijnlijk dat een 
Iterator een __iter__ method heeft, die voor een Iterator terug geeft 
(een .next method heeft); Iterators kunnen daar dus self terug geven. :)

Voor de duidelijkheid: elke callable (function, method, __call__ method) 
dat het keyword 'yield' gebruikt, geeft bij aanroepen een Generator 
Iterator terug. Zie http://docs.python.org/ref/yield.html.

Vandaar dat je voor __iter__ ook een method kan begruiken dat het yield 
statement gebruikt, want dan geeft aanroep van zo'n methode een Iterator 
terug.

Martijn Pieters
_______________________________________________
Python-nl mailing list
Python-nl@python.org
http://mail.python.org/mailman/listinfo/python-nl

Antwoord per e-mail aan