1 class MyIterable:
2 def __init__(self):
3 self.data = [1, 2, 3]
4
5 def __getitem__(self, index):
6 return self.data[index]
7
8 def __iter__(self):
9 return MyIterator(self.data)
10
11
12 class MyIterator:
13 def __init__(self, data):
14 self.data = data
15 self.index = 0
16
17 def __next__(self):
18 if self.index >= len(self.data):
19 raise StopIteration
20 value = self.data[self.index]
21 self.index += 1
22 return value
23
24
25 my_iterable = MyIterable()
26
27 # 使用 for 循环迭代对象
28 for item in my_iterable:
29 print(item) # 输出:1 2 3
30 # 多次迭代也会报错
31 for item in my_iterable:
32 print(item) # 输出:1 2 3
33
34 # 调用 iter() 函数获取迭代器对象
35 my_iterator = iter(my_iterable)
36 # __next__ 也不会抛StopIteration异常
37 print(next(my_iterator)) # 输出:1
38 print(next(my_iterator)) # 输出:2
39 print(next(my_iterator)) # 输出:3