使 Python 类支持 for 循环通过内部可迭代成员变量

q09*_*987 2 python python-3.x

from sortedcontainers import SortedSet

class BigSet(object):
    def __init__(self):
        self.set = SortedSet()
        self.current_idx = -1

    def __getitem__(self, index):
        try:
            return self.set[index]
        except IndexError as e:
            print('Exception: Index={0} len={1}'.format(index, len(self.ord_set)))
            raise StopIteration

    def add(self, element):
        self.set.add(element)

    def __len__(self):
        return len(self.set)

    def __iter__(self):
        self.current_idx = -1
        return self

    def __next__(self):
        self.current_idx += 1
        if self.current_idx == len(self.set):
            raise StopIteration
        else:
            return self.set[self.current_idx]

def main():
    big = BigSet()
    big.add(1)
    big.add(2)
    big.add(3)

    for b in big:
        print(b)

    for b2 in big:
        print(b2)

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

我有一个嵌入了名为 的可迭代成员变量的类self.set,我想让这个类支持for循环。上面是我为此目的编写的代码。但是,我认为必须有更好的方法来更轻松地完成此任务,因为该类已经有一个可迭代的成员。

问题> 有没有一种方法可以将工作委托给嵌入式self.set?另外,我认为也许还有一个很好的方法来实施__getitem__

谢谢

jua*_*aga 5

我几乎可以肯定您不希望您的容器成为迭代器。所以,它不应该实施 __next__。相反,它应该是可迭代的,因此它只需要实现__iter__。在这种情况下,如果您想委托给可迭代成员:

def __iter__(self):
    return iter(self.set)
Run Code Online (Sandbox Code Playgroud)

并删除你的__next__方法。