将我的函数转换为一个类

use*_*421 1 python python-3.x

我有以下代码是我为一门运行良好的课程编写的:

def reverse_iter(iterable):
    """Return a generator that yields items from iterable in reverse order"""
    last = len(iterable) - 1
    while last >= 0:
        yield iterable[last]
        last -= 1
Run Code Online (Sandbox Code Playgroud)

作业的下一部分是把这个函数变成一个类。我知道这不切实际,但这是被问到的。我对类的了解非常有限,但我想出了以下代码:

class ReverseIter:
    """Class whose instances iterate the initial iterable in reverse order"""
    def __init__(self, iterable):
        self.iterable = iterable

    def iterreverse(self):
        last = len(self.iterable) - 1
        while last >= 0:
            yield self.iterable[last]
            last -= 1  

nums = [1, 2, 3, 4]
it = ReverseIter(nums)
print(iter(it) is it)
print(next(it) == 4)
print(next(it))
print(next(it))
print(next(it))
print(next(it))
Run Code Online (Sandbox Code Playgroud)

输出始终读取 TypeError: 'ReverseIter' object is not iterable。我不知道为什么会出现这种情况。任何解释或建议都会有所帮助。顺便说一下上面的print语句的输出应该分别是True, True, 3, 2, 1, Stop Iteration。

Pat*_*ugh 5

一个对象是一个迭代器,如果它有一个__next__方法,它被调用来获取下一个项目(并且StopIteration在它用完时应该引发),并且__iter__它返回一个迭代器(通常只是self

class ReverseIter:
    def __init__(self, sequence):
        self.sequence = sequence
        self.index = len(sequence) 
    def __iter__(self):
        return self
    def __next__(self):
        if self.index > 0:
            self.index -= 1
            return self.sequence[self.index]
        else:
            raise StopIteration
Run Code Online (Sandbox Code Playgroud)