gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:32:25 25 4
gpt4 key购买 nike

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 循环。上面是我为此目的编写的代码。但是,我认为必须有更好的方法来更轻松地完成此任务,因为该类已经有一个可迭代的成员。

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

谢谢

最佳答案

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

def __iter__(self):
return iter(self.set)

并删除您的 __next__方法。

关于python - 使 Python 类支持 for 循环通过内部可迭代成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45467785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com