MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

Pythonにおける型ヒント入門


Advanced Python Development: Using Powerful Language Features in Real-World Applications

目次

はじめに

Pythonは動的言語で、

型を指定する必要は無いのですが、

それが原因で、意図しない入力が関数が入力されたりして、

バグの温床になりがちです。

 

そこで、Python3.5あたりから、

型ヒント(型アノテーション)という機能が追加されました。

docs.python.org

これにより、変数や、関数の入出力に型情報を追加することができ、

意図しないコードの使用や状態を事前に検知することができます。

 

今回の記事では、

このPythonの型ヒントの概要について説明したいと思います。

 

Pythonの型ヒント

前述の通り、Pythonの型ヒントは、

Pythonの関数や変数に型情報や、

Finalなどの修飾情報を追加する機能です。

python.ms

www.smartbowwow.com

 

Python2では、コメント型のアノテーションを利用していましたが、

Python3では、文法として正式採用されています。

今回の記事では、Python3の方法をベースに説明します。

 

まずはじめにPythonの型ヒントの

一つ注意点としては、

このアノテーションは、Pythonの実行環境的には、

ただのコメントになることです。

 

なので、Pythonのスクリプトを実行した時に、

型アノテーションに従わない入力がされても、

エラーなどにはなりませんし、

パフォーマンスなどが落ちることはありません。

この型アノテーションは、後述の型チェックのツールを使うことで、

事前にコードの問題を発見できる機能だと考えることができます。

 

型アノテーションの書き方

具体的な型アノテーションの書き方としては、

下記のmypyのチートシートを見てもらうとわかりやすいと思います。

mypy.readthedocs.io

変数や、関数の引数、返り値など様々なものに、型ヒントをつけることができます。

 

下記は型ヒントの例です。

# 変数
value: int = 1

# 関数
def hoge(num: int) -> str:
    return str(num)

 

組み込み型の型アノテーションの場合は、問題無いですが、

すこし複雑な型アノテーションを利用したい場合は、

標準モジュールである typingを

docs.python.org

利用する必要があります。

例えば

  • コレクション (Listの中にintが入っている。)

  • 新しい型を定義する

  • 関数を引数にする関数

などがあります。

こちらの記事がわかりやすいです。

python.ms

 

また、変数の型だけでなく、Finalのアノテーションやfinalデコレータを使うことで、

クラスや関数の継承を禁止したり、変数の再代入を禁止することもできます。

www.python.org

  

静的型チェッカー mypy

静的に型をチェックするツールはいろいろありますが、

今回は一番有名はmypyを使います。

mypy-lang.org

qiita.com

qiita.com

qiita.com

github.com

mypyはPython の生みの親である Guido van Rossumが

Dropboxに所属していた時に、Dropbox内で開発が始まったものです。

インストール方法

$ pip install mypy

ターミナル上での使い方

基本的に下記のように、ファイルを指定すると型チェックをしてくれます。

$ mypy [file]

また、自動的にあるディレクトリを再帰的に検索して、すべてを型チェックしたい場合は、

$ find . -name "*.py" | xargs mypy

のように実現できます。

すでに存在している、型アノテーションがついていないPythonファイルを徐々に、

型チェックしていく場合、

こちらの記事で紹介されている通り、

qiita.com

対象のファイルパスをmypy_check_filesなどのファイルに羅列し、

それらを

$ mypy @mypy_check_files

で、読み込ませると指定したファイルを型チェックしてくれます。

あとは、型アノテーションを追加したファイルを先程のファイルに追加すれば、

徐々に型チェックを広げていくことが可能です。

mypy.iniの作り方

mypy.iniというmypyの設定ファイルを利用することで、

より厳しいチェックをするなど、様々な設定を変更することができます。

 

設定方法に関しては、下記を参照ください。

qiita.com

scrapbox.io

 

PyCharm

JetBrainsのPython IDEでの型ヒントの利用法です。

myenigma.hatenablog.com

 

PyCharmでの型入力

PyCharmでは、関数や変数の上で、Alt+Enterを押すと簡単に、

型ヒントを入力することができます。

pleiades.io

 

PyCharmでの型チェック

PyCharmでは、型ヒントを入力すると、

特に何もしなくても、Pycharmのインスペクションの一貫として、

型チェックをしてくれます

pleiades.io

 

PyCharmで開発している人は、これだけでも

型ヒントを導入するメリットがあると思います。

 

CI上でチェックする

このような型チェックは、

コミットごとにCIで定期実行した方が便利です。

 

JenkinsやGitHub actionsでは、

こちらの方法のように、普通にpipでmypyをインストールして、

find等で検索し、型チェックを実行することが可能です。

github.com

 

加えて、こちらのリポジトリを使うことで、簡単にgithub action上でdockerを使ってmypyを実行できます。

github.com

 

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

 

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com


Advanced Python Development: Using Powerful Language Features in Real-World Applications