Python - Toku's Blog
とあるエンジニアの備忘録

Python

Python3.5のType Hintについて

この記事はPython Advent Calendar 2015の23日目の記事です。 ちゃんとした記事をこのブログに書くのは今回が初です(笑) 早速、やってきまそ。 Type Hintsについて書こうと思ったわけ 最近HaskellやScalaなどの関数型のパラダイムを持つ静的型付け言語を学ぶようになって型推論など面白いなーなど思っていたところに動的型付けのPythonで型についての提案が導入されたので気になった次第です。 動的型付け言語ですからてきと〜にプログラム書いてても通ってしまいます。まぁそこがいいとこでもあるのかもしれませんが、少し大きなライブラリや業務で使うとなるとバグ見つけたりするのに苦労しそうです。 そこでType Hintsがあれば!!!というわけで勉強がてら紹介です。 それと、記事投稿遅れてスイマセンm(_ _)m Type Hintsとは! Type HintsとはPEP0484で提案された静的型解析などを行うための仕様を提案したものです。 ぶっちゃければ、関数の引数・戻り値などに型を指定して型チェックを行うための仕様を提案したもの。 目的は・・・ この提案の目的としては型アノテーションの標準化された構文の提供です。これにより、静的型解析やリファクタリングや実行時の型チェックなどなど、行えるようになります。 まぁ、主には静的型解析がやりたいそうです。 目的じゃないもの この提案が取り込まれた暁にはPythonは静的型付け言語に・・・・!! とはならないわけで。 依然として動的型付け言語ですし、Type Hintsを必須にすることは望んでないようです。 まぁ、自分は取っ付き易いとこがPythonの取り柄の一つだと思っているので、良い考えだと思います。 それでは本題に。 型定義の構文 def func(name: str) -> str: return 'Hello ' + name とまぁ、関数アノテーションを利用して型を指定してあげるだけです。簡単ですね。 型を参照したい場合は__annotations__属性として参照できます。 >>> func.__annotations__ {'name': <class 'str'>, 'return': <class 'str'>} 型の別名 変数に突っ込みましょう。注意するのが、変数名の先頭を大文字にしておくことです。 (ユーザー定義型として扱うので) Name = str def func(name: Name) -> str: return 'Hello ' + name ジェネリクス typingモジュールのTypeVarを使います。