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()
我有一个嵌入名为self.set
的可迭代成员变量的类,我想启用此类来支持for
循环。以上是我为此目的编写的代码。但是,我认为必须有更好的方法来完成这项任务,因为类已经有了一个可迭代的成员。
问题>有没有办法可以将作业委托给嵌入式self.set
?另外,我认为也许有一种很好的方法来实现__getitem__
。
谢谢
答案 0 :(得分:2)
我几乎可以肯定你不希望你的容器是迭代器。因此,它应该不实现 __next__
。相反,它应该是 iterable ,因此它只需要实现__iter__
。在这种情况下,如果要委托给可迭代成员:
def __iter__(self):
return iter(self.set)
并删除您的__next__
方法。