Тип ошибки Iter-Python3

может кто-нибудь объяснить, почему следующий код дает

TypeError: iter() returned non-iterator of type 'counter'  in python 3

это работает в Python 2.7.3 без каких-либо ошибок.

#!/usr/bin/python3

class counter(object):

    def __init__(self,size):
        self.size=size
        self.start=0

    def __iter__(self):
        print("called __iter__",self.size)
        return self

    def next(self):
        if self.start < self.size:
            self.start=self.start+1
            return self.start
        raise StopIteration

c=counter(10)
for x in c:
    print(x)

2 ответов


в питон3.x вам нужно использовать __next__() вместо next() .

С что нового в Python 3.0:

PEP 3114: стандартный метод next () был переименован в __next__().

однако, если вы хотите, чтобы ваш объект должен быть итерируемым как в Python 2.X и 3.X вы можете назначить на имя __next__.

class counter(object):

    def __init__(self,size):
        self.size=size
        self.start=0

    def __iter__(self):
        print("called __iter__",self.size)
        return self

    def next(self):
        if self.start < self.size:
            self.start=self.start+1
            return self.start
        raise StopIteration

    __next__ = next # Python 3.X compatibility

вам нужно __next__(self) Не следующее:

def __next__(self):