实现 __iter__()
Coddy Python 迭代器 课程的第 4 课,共 13 课。
在 Python 中创建自定义迭代器,需要在类中实现 __iter__() 方法。这个方法是迭代器协议的重要组成部分,你可以用它定义自定义对象作为迭代器时的行为。
__iter__() 方法
__iter__() 方法有两个主要用途:
- 让对象可迭代。
- 返回迭代器对象本身。
下面是包含 __iter__() 方法的类的基本结构:
class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
实现 __iter__()
要在自定义类中实现 __iter__():
- 在类中定义
__iter__()方法。 - 该方法应返回迭代器对象本身(通常是
self)。
下面是一个简单的自定义迭代器示例:
class CountDown:
def __init__(self, start):
self.start = start
def __iter__(self):
# 返回迭代器对象(self)
return self
def __next__(self):
if self.start <= 0:
raise StopIteration
self.start -= 1
return self.start + 1
# 使用自定义迭代器
countdown = CountDown(5)
for num in countdown:
print(num)
在这个示例中,__iter__() 方法返回 self,因此 CountDown 对象既可迭代,也是它自己的迭代器。
要点
- 对对象使用
iter()函数,或在 for 循环中使用对象时,都会调用__iter__()方法。 - 当类同时实现
__iter__()和__next__()时,在__iter__()中返回self是很常见的做法。 - 如果你的类只实现了
__iter__(),它应返回一个单独的迭代器对象,该对象具有__next__()方法。
通过实现 __iter__(),你可以让自定义对象变得可迭代,从而在 for 循环以及 Python 中其他基于迭代器的操作中使用它们。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
挑战
简单创建一个名为 AlphabetIterator 的自定义迭代器类,用于生成英文字母表中的大写字母。迭代器应从 'A' 开始,一直生成到指定字母。
你会获得以下输入:
- 一个大写字母(例如 'E'、'K'、'Z')
你的 AlphabetIterator 类应:
- 实现
__iter__()方法,使对象可以迭代 - 从 'A' 开始生成大写字母
- 到达指定的输入字母时停止(包括该字母)
实现 AlphabetIterator 类后,使用输入字母创建该类的一个实例,并将生成的每个字母打印在新的一行。
输入将以字符串形式提供,其中包含一个大写字母。
亲手试试
# 读取输入
end_letter = input().strip()
class AlphabetIterator:
def __init__(self, end_letter):
self.end_letter = end_letter
self.current_letter = 'A'
def __iter__(self):
return self
# TODO:实现 __next__() 方法
# 创建一个 AlphabetIterator 实例
alphabet_iter = AlphabetIterator(end_letter)
# TODO:遍历 AlphabetIterator 并打印每个字母
# 注意:确保每个字母单独打印在一行Python 迭代器中的所有课
自己练习: Python 在线编译器