Pytonの型ヒントについて
Pythonでは変数宣言時に型宣言をしなくても動作します。
古いPythonは変数の型を明示的に記載する術はなかったかと思いますが、Python3.5よりPythonにも変数の「型ヒント」というものがつけられるようになりました!
型ヒントの使い方
以下のような通常の変数宣言に対し、
通常の変数宣言
a = 100
Pythonの型ヒントは以下のようにつけられます。
型ヒント付き変数宣言
a: int = 100
変数名の後ろに: 型
をつけるだけです!
簡単ですね!!!
型ヒントの問題点
Pythonでも型ヒントのおかげで、変数の型がわかるようになりました!
めでたしめでたし👏👏
と思えます。
ですが、世の中それほど甘くはないようです…。
以下をご覧ください。
問題のコード
a: int = "I'm an integer."
print(a, type(a))
# I'm an integer. <class 'str'>
上記のコードはエラーを吐かずに実行されます。
a: int
とaをint型で型ヒントをつけたにもかかわらず、str型の値を代入できています。しんじられなーい…です。
同様に型ヒントをつけていても違う型の値が代入された瞬間に違う型になってしまいます。
問題のコード2
a: int = 100
b: str = "bbbbb"
print(a, type(a))
# 100 <class 'int'>
a = b
print(a, type(a))
# bbbbb <class 'str'>
まとめ
- Pythonの型ヒントはその名の通り所詮ヒントでしかありません。
- 型ヒントと違う型が代入されてもエラーを吐いたり教えてくれたりはしません。
- 違う型が代入された場合は混乱のもとでしかない。
- 結局はコードを書く側がしっかりと型を意識しておく必要がある。
<参考>型ヒント通りに代入されているかを確認したい(違う場合は教えてほしい)場合
mypyというコード上の型を性的解析してくれるライブラリを使って確認することができます。
以下のページを見れば雰囲気はわかるかと思います。
mypyについては検索すると多くの情報が出てくるので興味があれば検索してみてください。