37
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PyCharmで型補完を効かせる

Last updated at Posted at 2015-02-04

型の手がかりがないと、PyCharmは候補を出してくれません。

cameo_trackers_py_-opencv-python_p150121-____tmp_opencv-python_p150121_3.jpg

リスト型とわかると、リストに関するメソッドなどを候補として出してくれます。

cameo_trackers_py_-opencv-python_p150121-____tmp_opencv-python_p150121_1.jpg

しかし、これでもリストに入っている要素の型まではわからないため、以下の場合、PyCharmは候補を出してくれません。

cameo_trackers_py_-opencv-python_p150121-____tmp_opencv-python_p150121_2.jpg

しかし""":type: <type>"""を使って、型を明示する文を入れてあげると、この場合はFaceクラスのフィールドが候補として出されます。

cameo_trackers_py_-opencv-python_p150121-____tmp_opencv-python_p150121_4.jpg

ちなみに関数を普通に書くとPyCharmは型を適宜推論してくれますが・・・

3rd-typing_…filters_py-opencv-python_p150121-____tmp_opencv-python_p150121_5.jpg

:rtype :<type>を使って、関数の戻り値を型指定することもできます。

3rd-typing_…filters_py-opencv-python_p150121-____tmp_opencv-python_p150121_3.jpg

返り値だけでなく引数の型を指定することもできます。

指定しないと何も候補を出してくれませんが・・・

cameo_cameo_py_-opencv-python_p150121-____tmp_opencv-python_p150121_7.jpg

・・・:type x: <type>で指定すると候補を出してくれます。ちなみに関数を書いて改行したあとに"""と打って改行するとdocstrings形式の注釈を入れるひな形をPyCharmが自動で入力してくれます。

cameo_cameo_py_-opencv-python_p150121-____tmp_opencv-python_p150121_6.jpg

表記 内容
Foo Fooクラス
x.y.Bar x.yモジュールのBarクラス
Foo | Bar Foo もしくは Bar
(Foo, Bar) FooとBarのタプル
list[Foo] Fooを要素とするリスト
dict[Foo, Bar] FooからBarへの辞書
T ジェネリック型 (T-Zはジェネリック型の予約語)
T <= Foo Fooを継承したクラス
list[T <= Foo] リストの要素として、Fooを継承したタイプしか受け付けない
Foo[T] Tを引数にとるFoo
(Foo, Bar) -> Baz Bazを返す、FooとBarの関数
list[dict[str, datetime]] 文字列からdatetimeへの辞書、のリスト(要素の入れ子)

ブログやってます:Weed software

37
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?