mypy - 待望の3.9型ヒント対応
Kyutatsu
自己紹介
• Kyutatsu ( 西浦久達, にしうらきゅうたつ)


• Webエンジニアをやってます。


• Python, Django, DRF, AWS…


• https://qtatsu.hatenablog.com/ (はてブ: qtatsuの週報)
新しい型ヒント、使った方がいい?
• Python3.9から型ヒントの書き方に変更が入った。
• これからは、新しい書き方を使うべきなのか?
型ヒントとは?
• 参考資料
• 公式ドキュメント https://docs.python.org/3/library/typing.html
• PyCon2021 https://youtu.be/jLQLFFznPIo
• あくまでヒント。
• 型を間違えても、処理が可能なら実行時にエラーは起きない。
mypyとは?
• コードの実行前に、型が正しいかチェックできる。
成功例
$ mypy slide.py


Success: no issues found in 1 source file
• Ref.  https://github.com/python/mypy
mypyとは?
• コードの実行前に、型が正しいかチェックできる。
$ mypy slide.py


slide.py:2: error: Unsupported operand types


for + ("str" and "int")


Found 1 error in 1 file (checked 1 source file)
型に問題があった!
• Ref.  https://github.com/python/mypy
Python3.9: typingモジュールに新機能追加!
ところが…
mypy(0.790)
$ mypy slide.py


slide.py:1: error: "list" is not subscriptable, use "typing.List"
instead


Found 1 error in 1 file (checked 1 source file)
Python3.9の書き方でエラー(あってるのに…)
Python3.9: typingモジュールに新機能追加!
mypy(0.800)が1/22にリリース!
$ mypy slide.py


Success: no issues found in 1 source file
ところが…
新しい記法を試してみる!
mypy(0.800)が対応してくれた、


python3.9(3.10)の新記法を試してみる!
組み込みlist
python3.8以前
• 他、tuple, dict, setなど
• PEP585を反映
python3.9∼
組み込みの list がそのまま利用できるようになった!
組み込みlist
$ mypy slide.py
mypy==0.790
slide.py:1: error: "list" is not subscriptable, use
"typing.List" instead


Found 1 error in 1 file (checked 1 source file)
組み込みlist
Success: no issues found in 1 source file


$ mypy slide.py
mypy==0.800
「 | 」で複数の型を指定
python3.9以前
python3.10∼ ?
PEP604を反映
__future__でPython3.10の機能を先取りできる
• Ref. https://docs.python.org/ja/3/library/__future__.html
• Python側は、3.7以降なら利用可能
• Mypy側は最新の0.800で対応済み!
「 | 」で複数の型を指定
$ mypy slide.py
mypy==0.790
slide.py:3: error: Invalid type comment or
annotation


Found 1 error in 1 file (checked 1 source file)
「 | 」で複数の型を指定
Success: no issues found in 1 source file


$ mypy slide.py
mypy==0.800
古い記法はdeprecated
• Python3.9のtypingモジュールでの変更は多め。


• 古い書き方は非推奨になっている!
• 以下はhttps://docs.python.org/3/library/typing.htmlから引用
“class
 
typing.List(list, MutableSequence[T])


….(省略)…..


バージョン 3.9 で非推奨:
 
builtins.list
 
は
 
[]
 
をサポートするようになり
ました。
 
PEP 585
 
および
 
Generic Alias Type
 
を参照してください。
新しい型ヒント、使った方がいい?
• mypyが対応したので、3.9(3.10)記法で是非書くべき!
• Pythonのバージョンが低くても、__future__を使えば
利用可能(3.7以上)。
• このLTが終わったら、是非
` pip install mypy==0.800` を実行してください!
その他の改善
• https://mypy-lang.blogspot.com/2021/01/mypy-0800-
released.html


• https://docs.python.org/3/library/typing.html
おわり
ご静聴ありがとうございました!

mypy - 待望のPython3.9型ヒント対応