【发布时间】:2021-02-17 00:34:05
【问题描述】:
所以我最近在我的 python 类中了解了迭代器协议,我被告知 __iter__(self) 方法应该总是返回一个新的迭代器而不是 self。在 Fluent Python 书中,它谈到了在迭代器中返回 self,所以我不确定为什么我的导师告诉我不能使用 self 作为返回值。
这是我们在考试中的示例,我因使用 self 而不是 FileNamesIterator 而失分。
class FileNamesIterator:
"""
Iterator that iterates over all the file names in the
FileNamesIterable.
"""
def __init__(self, filename_iterable: FileNamesIterable):
self.filename_iterable = filename_iterable
self.curr_index = 0
def __next__(self) -> str:
file_list = self.filename_iterable.file_list
if self.curr_index == len(file_list):
raise StopIteration()
next_file_name = file_list[self.curr_index]
self.curr_index += 1
if ".png" in next_file_name:
next_file_name = f"{next_file_name} - Portable Network Graphics " \
f"File"
elif ".gif" in next_file_name:
next_file_name = f"{next_file_name} - Graphics Interchange " \
f"Format File"
return next_file_name
def __iter__(self) -> FileNamesIterator:
return self
class FileNamesIterable:
def __init__(self, file_list: list):
self.file_list = file_list
def __iter__(self) -> FileNamesIterator:
return FileNamesIterator(self)
【问题讨论】: