Python 100Days Challenge Day21
Iteratorデザインパターンについて学んでいく。
概要
- コレクションの要素を順番に取り出して操作する方法を提供するデザインパターン
- コレクション=リスト・辞書 etc.
本のページを1Pずつめくって読むようなイメージ
本棚にたくさんの本があるとして、そこから1冊ずつ本を取り出して読む。
Iteratorパターンはこのようなイメージ
実際に書く
BookCollectionクラスが本のリストを持って、BookIteratorクラスがそのリストから1冊ずつ本を取り出していくコードを書く
class BookCollection:
def __init__(self):
self.books = []
def add_book(self,book):
self.books.append(book)
def __iter__(self):
return BookIterator(self.books)
class BookIterator:
def __init__(self, books):
self._books = books
self._index = 0
def __next__(self):
if self._index < len(self._books):
book = self._books[self._index]
self._index += 1
return book
else:
raise StopIteration
# コレクションを作成する
my_books = BookCollection()
my_books.add_book("Python Coding")
my_books.add_book("Learning Python")
my_books.add_book("Data Science with Python")
# イテレータを使って本を1冊ずつ取り出す
for book in my_books:
print(book)
>
Python Coding
Learning Python
Data Science with Python