0

我正在尝试创建一个可迭代的类,但可以这么说,我一直在把头撞到墙上,得到“对象不可迭代”。这是我的代码:

class myiterable:
    def __init__(self, somelist):
        self.i = 0
        self.l = somelist

    def __iter__(self):
        return self

    def __next__(self):
        if self.i < len(self.l):
            self.i = self.i + 1
            return self.l[self.i-1]
        else:
            raise StopIteration



for i in myiterable([1, 2, 3, 4, 5]):
    print(i)

怎么了?我也试过next(self)代替__next__(self)无济于事!

4

2 回答 2

4

您的代码有几个问题:

  • 缩进
  • 如果你在 python 2 上,你应该定义next()方法而不是__next__()(让它保持原样,就像在 python 3 上一样)
  • ++self.i应该替换为self.i += 1
  • self.l[i-1]应该替换为self.l[self.i-1]

class myiterable:
    def __init__(self, somelist):
        self.i = 0
        self.l = somelist

    def __iter__(self):
        return self

    def next(self):
        if self.i < len(self.l):
            self.i += 1
            return self.l[self.i-1]
        else:
            raise StopIteration


for i in myiterable([1, 2, 3, 4, 5]):
    print(i)

印刷:

1
2
3
4
5
于 2013-08-29T08:50:00.180 回答
2

如果你只是复制你的代码,那应该是因为缩进不好。拉__iter____next__到与 相同的缩进__init__

于 2013-08-29T08:48:05.647 回答