Categories: Python

【Python】型ヒントに沿ってソースコードが書けているかチェックする方法

この記事では、Pythonのソースコードが型ヒントに沿って書けているかチェックする方法を解説します。

ソースコードが型ヒント通りに書けているか確認するにはmypyモジュールを使います。mypyは、標準ライブラリではないのでpipでインストールします。

Linkmypy 0.961 documentation

それでは、実際に簡単なソースコードを作成してmypyを使って型ヒント通りに書けているかチェックしてみましょう!

mypyのインストール

mypyは標準モジュールではないのでインストールする必要があります。

仮想環境を利用したい場合は以下の記事を参照してください。

仮想環境の使い方【venv】

ここではpipを使ってインストールします。

$ pip install mypy

pipが使用できない方は以下の記事を参照してください。

pipのインストール【Mac/Windows】

ソースコードの用意

mypyがインストールできたら次に、以下のような簡単なソースコードを用意します。名前は適当にtestmypy.pyとかで保存しましょう。

testmypy.py

num: int | float = 'abc'
vals: list[str] = [1, 2, 3]

num変数にはintvals変数にはstrlistを型ヒントで指定していますが、敢えて異なる型のオブジェクトを代入しています。

型ヒントについては以下の記事を参照してください。

型ヒントで使用する型を指定しよう【アノテーション】

このソースコードが型ヒント通りに書けているかmypyを使ってチェックしてみましょう!

mypyの実行

コマンドラインを起動して先ほどのtestmypy.pyが保存されている場所に移動します。僕の場合は/Users/user/Desktop/Python/mypy/に保存したので以下のようにcdを使って移動します。

$ cd /Users/user/Desktop/Python/mypy/

そしたら、testmypy.pymypyコマンドで実行します。

$ mypy testmypy.py

実行すると以下のように型ヒント通り書かれていない箇所がエラーとして表示されます。

$ mypy testmypy.py 
testmypy.py:1: error: Incompatible types in assignment (expression has type "str", variable has type "Union[int, float]")
testmypy.py:2: error: List item 0 has incompatible type "int"; expected "str"
testmypy.py:2: error: List item 1 has incompatible type "int"; expected "str"
testmypy.py:2: error: List item 2 has incompatible type "int"; expected "str"
Found 4 errors in 1 file (checked 1 source file)

表示されたエラーを確認しつつ、型ヒント通りにソースコードを書き直して実行してみます。

testmypy.py

num: int | float = 3.14
vals: list[str] = ['a', 'b', 'c']

コマンドライン

$ mypy testmypy.py
Success: no issues found in 1 source file

Successが表示されたので型ヒント通りに書かれていることが確認できました。

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

View Comments

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago