Site icon imageTomoMemo.dev

Memo on programming. Provided by Tomo with passion.

Pythonで学ぶデザインパターン[Iterator]

Icon in a callout block
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

Powered by Tomo with passion.