Pythonではイテレータを簡単に作れます。もしかしたら何かに使えるかもしれないので、素振りします。
環境
- Python
- 3.12
ゴール
PythonのFCC(First Class Collection)にて、For文を使用する際にFCCのインスタンスのまま使用できること。
from typing import List class User(): # ... 省略 class Users(): value: List[User] # コンストラクタ省略 users = Users([]) # この記載ができることがゴール [user for user in users] # ※ もちろん、対応前でも値を取得すれば元の通りにアクセスできます。 [user for user in users.value]
実装
iter
メソッドか、yield from
で内部の値にアクセスすることで、外側からは意識せずともFor文で使用できます。
from typing import List, Iterable class Users(): value: List[User] def __iter__(self) -> Iterable[User]: # イテレータプロトコルを実装する return iter(self.value) # yield from でListのイテレータを呼ぶこともできる yield from self.value
ソースコード
終わりに
頭に良い人ならもうちょっと面白い使い方ができそうなのですが、今の私ではFCCを使用する際に記載量を減らせる、というくらいにしか使え無さそうでした。
Pythonで型を意識するような書き方自体が微妙かもしれませんが、ライブラリが優秀なおかげで他言語と遜色ない処理が色々とできますし、しばらくの期間はPythonを使い倒せるようにしたいですね。