mypy
py.typed is 何
スパータイプ系いろいろ
Mapping[K, V]: dict, TypedDict どっちも取る時に割合よく使うか
Iterable[T]: イテレート可能なもの、list, set, dict, generator
Sequence[T]: list, tuple, str など
Container[T]; in 演算子使えるもの
Sized: len() をサポートするもの
Collection[T]: Sized, Iterable, Container
type statement
あれ type Foo = Literal[...] のような type あるんだ、とおもったら 3.12
Never
assert_never 関数が呼ばれている行に到達できるケースがあると型チェックでエラーに
NoReturn?
pyproject.toml の mypy
code:pyproject.toml
mypy_path = "stubs"
tool.mypy.overrides
ignore_missing_imports = true
stubgen
mypy の型つくるやつ
$ stubgen -p selenium -o stubs
missing library stubs or py.typed marker
そこそこ使われているライブラリでも発生する場合 PR したほうが良いのだろうか?
VSCode の mypy 拡張でサブディレクトリの設定を読んでくれない monorepo などで困る
code:settings.json
"mypy-type-checker.args": [
"--config-file=${workspaceFolder}/python-api/pyproject.toml",
],
ignore_missing_imports しても no-untyped-call に怒られる
code:sample.py
import google.auth
creds, _ = google.auth.default()
などで error: Call to untyped function "default" in typed context [no-untyped-call] で怒られる
外部ライブラリで型提供していなかったら ignore_missing_importsやと言われるが、
code:pyproject.toml
tool.mypy.overrides
ignore_missing_imports = true
disallow_untyped_calls = false
などしてだめ
おそらくこの overrides 側の disallow_untyped_calls=false は意味なくて
呼び出し側が untyped な call をしているわけだから disallow_untyped_calls=false しないと効かない?
となると全体に影響が出て嫌だなあと思っていると untyped_calls_excludes があった
code:pyproject.toml
disallow_untyped_calls = true
これで解決
Generator の型
from collections.abc import Generator, Iterator
Generator[T, U, V]
yield で返す値, send で受け取る値, return で返す値
Iterator[T] は Generator[T, None, None] と実質的におなじ