Fluent Python之python实现可迭代类
要让类对象可迭代,我们需在类中实现__iter__和__next__方法。
__iter__方法会生成一个迭代器,在__iter__方法中返回self类对象本身即可;然后通过对该迭代器不断调用__next__方法返回数据实现类对象的迭代效果。
#!/usr/bin/env python3
"""
通过__iter__和__next__实现了一个可输出指定数字范围内奇数的类
"""
class OddNumber:
def __init__(self, end, start=1):
self.max_num = end
self.start = start
self.first = True
def __iter__(self):
return self
def __next__(self):
if self.first: #第一次调用返回起始值
self.first = False
if self.start % 2 == 0: #起始值若非奇数,给其加1并返回
self.start += 1
return self.start
else:
self.start += 2
if self.start < self.max_num:
return self.start
else:
raise StopIteration #遍历超出给定范围抛出StopIteration停止迭代
if __name__ == '__main__':
#输出[13,30]内的奇数
odd = OddNumber(30, 13)
for num in odd:
print(num)
输出结果:
13
15
17
19
21
23
25
27
29
Process finished with exit code 0