🚀

Iteratorパターンを学ぶ【Python】

2022/02/06に公開

一言で言うと

繰り返し。集合オブジェクトに対して1つ1つ数え上げてオブジェクトをを取得する。for文とかで使う。

コードサンプル

ディレクトリ構造
iterator
├── book.py
├── book_shelf.py
└── main.py
main.py
from book import Book
from book_shelf import BookShelf


def main():
    bs: BookShelf = BookShelf()
    bs.appendBook(Book("Javaで学ぶデザインパターン入門"))
    bs.appendBook(Book("実践Python3"))
    bs.appendBook(Book("リーダブルコード"))
    bs.appendBook(Book("ソフトウェアテストの教科書"))

    for book in bs:
        print(book.name)


if __name__ == '__main__':
    main()
book.py
class Book():
    def __init__(self, name) -> None:
        self.__name = name

    @property
    def name(self):
        pass

    @name.getter
    def name(self):
        return self.__name
book_shelf.py
from book import Book


class BookShelf():
    def __init__(self) -> None:
        self.__books: list[Book] = []

    def getBookAt(self, index: int) -> Book:
        return self.__books[index]

    def appendBook(self, book: Book) -> None:
        self.__books.append(book)

    def getLength(self) -> int:
        return len(self.__books)

    def __iter__(self):
        return BookShelfIterator(self)


class BookShelfIterator():
    def __init__(self, bf: BookShelf):
        self.__index: int = 0
        self.bf: BookShelf = bf

    def __next__(self) -> Book:
        if self.__index >= self.bf.getLength():
            raise StopIteration

        book: Book = self.bf.getBookAt(self.__index)
        self.__index += 1

        return book

参考文献

実践python3
増補改訂版Java言語で学ぶデザインパターン入門

Discussion