🚀
Iteratorパターンを学ぶ【Python】
一言で言うと
繰り返し。集合オブジェクトに対して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
Discussion