d at davea.name
Mon Dec 17 17:14:03 CET 2012
On 12/17/2012 06:27 PM, Ethan Furman wrote:
> Dave Angel wrote:
>> On 12/17/2012 09:33 AM, Skip Montanaro wrote:
>>> What method(s) does a class have to support to properly emulate a
>>> which supports turning it into a list? For example:
>>> class Foo:
>>> f = Foo()
>>> print list(f)
>>> Is it just __iter__() and next()? (I'm still using 2.4 and 2.7.)
>> I believe the container class needs to define the __iter__() method,
>> which has to return an iterator object.
>> That (possibly different) iterator class needs both an __iter__() method
>> and a next() method.
>> If the container class is also the iterator class, which is common, then
>> you just need one __iter__() method, which returns self.
> The `next()` method is also needed, as `__iter__()` and `next()` are the
> two methods that make up the iterator protocol (`__next__` in python 3k).
Didn't I say that? The next() method need not be in the container
class; it needs to be in the iterator class returned by the __iter__()
def __init__(self, value):
self.internal = value
self.internal += 1
if self.internal > 100:
for item in Container():
(tested in Python 2.7)
AHH, upon rereading, I see you misinterpreted what I meant. I was
trying to say that if there was only one class serving as both container
and iterator, you only needed one of the __iter__() methods instead of
two. In other words, you need two methods, not three.
More information about the Python-list