GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

Instagram

MonkeyType – ランタイム型を収集して静的型アノテーションを生成するPython用のシステム

投稿日:

ランタイム型を収集して静的型アノテーションを生成するPython用のシステム

MonkeyType

MonkeyTypeは実行時の型の関数の引数と戻り値を収集し、実行時に収集された型に基づいてスタブファイルを自動的に生成したり、Pythonコードにドラフト型の注釈を直接追加することもできます。

some/module.pyもともと以下を含んでいます:

def add(a, b):
    return a + b

myscript.pyは以下が含まれます:

from some.module import add

add(1, 2)

some/module.py myscript.pyを実行addsome/module.py型の注釈を推測したいとsome/module.pyていmyscript.py 1つの方法は実行することです。

$ monkeytype run myscript.py

デフォルトでは、現在の作業ディレクトリのmonkeytype.sqlite3ファイルのsqliteデータベースにコールトレースをダンプします。 monkeytypeコマンドを使用して、モジュールのスタブファイルを生成したり、コードに直接型注釈を適用したりすることができます。

monkeytype stub some.moduleを実行すると、スタブが出力されます。

def add(a: int, b: int) -> int: ...

monkeytype apply some.moduleを実行するとsome/module.pyが次のように変更monkeytype apply some.module

def add(a: int, b: int) -> int:
    return a + b

この例では、MonkeyTypeの値と制限の両方を示しています。 MonkeyTypeでは、実行時に使用する具体的な型を反映する注釈を追加するのは非常に簡単ですが、それらの注釈は、関数の意図されたすべての機能と常に一致するとは限りません。 例えば、 addは単なる整数よりも多くの型を扱うaddができます。 同様に、MonkeyTypeは、抽象SequenceまたはIterableがより適切である具体的なList注釈を生成することができる。 MonkeyTypeの注釈は、開発者が確認し修正するための有益な初版です。

動機

型の注釈をコードに追加する主な動機は、可読性と静的分析です。 多くのPythonスタイルガイドでは、関数の引数と戻り値の型をドキュメント化することはすでに一般的です。 注釈はこの文書を提供するための標準化された方法であり、 mypyのような型検査器による静的解析も可能にします。

Python型注釈の動機づけと設計の詳細については、 PEP 483PEP 484を参照してください。

要件

MonkeyTypeには、Python 3.6+と(コードファイルに型スタブを適用するための) retypeライブラリが必要です。 これはPython 3型アノテーション(型コメントなし)のみを生成します。

インストール

pipで MonkeyTypeをインストールする:

pip install MonkeyType

MonkeyTypeのしくみ

MonkeyTypeは、Pythonが提供するsys.setprofileフックを使用して、関数呼び出し、関数の戻り値、およびジェネレータのyieldに介入し、引数/戻り値/ yield値の型を記録します。

そのデータに基づいてスタブファイルを生成し、それらのスタブファイルをコードに直接適用するためにretypeを使用することができます。

詳細については、完全なドキュメントを参照してください。

トラブルシューティング

問題がよくある質問リストに記載されているかどうかを確認してください。

ライセンス

MonkeyTypeはBSDライセンスです。







-Instagram

執筆者: