mypy
目次

Type hints 覚書き

Union[int, str]

int or str の意。とり得る型が全部わかっているなら、 Any と書くより列記したほうがよい。

Optional[str]

str or None の意

Any

なんでもいい

ignore

mypy エラーを抑止

これ

  • Any は型チェックの敗北

  • ignore は敗北その2

  • 実行時にわかること は mypy にはわからない

  • mypy が解釈できないなら人間にも読みにくい

Type hints はどこに必要か、どこに書くべきか

  • 引数と戻り値

  • 定数の初期化時 (空の場合のみ)

  • 変数の初期化時

  • まわりのひとに、こうしてほしい (この型にしてほしい) って知らせたいとき

  • ついていたらありがたいと (自分が) 思うところ

  • どこという決まりはどうもないらしい (調べていて今のところ見つかっていない)

  • とりあえずのところ、 mypy に怒られるところにつけていけば、そのうちわかるようになると思う

python3 ではこういうふうに書ける

# https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html

age: int = 1
x: List[int] = [1]

def f(num1: int, my_float: float = 3.5) -> float:
  return num1 + my_float
  • typing --- 型ヒントのサポート ( バージョン 3.5 で追加 と言っている)

  • python3 でも、type hints を書いたからと言って、言語側でチェックしてくれるわけではない。 static type checker と言っているのが、 mypy とかのこと。

Tips

  • PyCharm で、 関数名やら定数やら変数やらを範囲選択 -> Option + Enter で type hints を自動追加できる

    • ガイド: PyCharmのヒント

    • いくつか試してみたけど、半々くらいの確率でちゃんとなる (期待どおりの type hints が追加できる)