Python 3では、タイプヒントを使用すると、mypyなどのサードパーティのツールでタイプを確認できます。しかし、私はプログラムのコメントと一緒に少し醜いタイプチェック構文を見つける。 mypyでは、スタブ関数とメソッドを.py
ファイルと同じディレクトリにある別のファイル.pyi
に入れることができます。 .py
ファイルの.pyi
ファイルにすべてのタイプ関連の構文を定義できますか?例えば、.pyi
ファイルで、すべての型構文を使用して変数、メソッド、戻り値の型などを定義できますが、コードは.py
のままにしておきます。Pythonのすべてのタイプヒント/検査インフラストラクチャを.pyiファイルに分けることは可能ですか?
0
A
答えて
1
PEP 484では、コードのユーザーのために既存のモジュールの「パブリックインターフェイス」として機能するカスタムpyiファイルを作成できると指定していますが、これらのpyiファイルを取得する方法は指定されておらず、内部的には、対応するpyファイルをtypecheckします。
実際、ディレクトリにpyとpyiファイルの両方が含まれている場合、pyファイルは完全に無視されます。
これはmypy issue trackerで公開されていますが、その機能が実装されていてもPythonのタイプのサブセットのみを使用できるため、私には優先度の低いタスクのようですシステム。
例えば、我々はテンプレートHTMLまたは何かのためにいくつかのコードを書くことNewTypeのようなものを使用したいとします
from pathlib import Path
from typing import NewType
UnsanitizedText = NewType('UnsanitizedText', str)
CleanHtml = NewType('CleanHtml', str)
HtmlTemplate = NewType('HtmlTemplate', str)
def get_user_input() -> UnsanitizedText:
# code omitted
def escape_to_html(raw: UnsanitizedText) -> CleanHtml:
# perform checks on 'raw', do escaping logic, etc
return CleanHtml(cleaned_string)
def load_template(path: Path) -> HtmlTemplate:
return HtmlTemplate(path.read_text())
def render_template(template: HtmlTemplate, *kwargs: CleanHtml) -> CleanHtml:
# code omitted
t = load_template(Path("foo/bar.html"))
dirty = get_user_input()
clean = escape_to_html(dirty)
print(render_template(t, arg=dirty)) # Does not typecheck
print(render_template(t, arg=clean)) # Typechecks
我々は実際に我々が構築ファントムnewtypesを呼び出す必要がないので/これらを混在して付き合うことができますファントムが正規表現内で呼び出すと、このモジュールをスタブとしてどのように表現するのかは不明です。
もスタブで表現するのは困難であろう他のいくつかのタイピングの機能があります - キャストのようなもの、NamedTuple、TypedDictなど
関連する問題
- 1. インフラストラクチャ検査に使用することはできますか?
- 2. 標準コンポーネントを検査することは可能ですか?
- 3. ReSharperでAgent Smith検査を有効にすることは可能ですか?
- 4. 個々のノードオブジェクトを検査することは可能ですか?
- 5. すべてのxcodeログを検索することは可能ですか
- 6. 分岐予測を助けることは可能ですか?
- 7. ADのすべてのコンピュータをPythonで返すことは可能ですか
- 8. Pythonでコンパイルされた正規表現をタイプヒントすることは可能ですか?
- 9. 自分のモバイルアプリに制限を設けることは可能ですか?
- 10. Python/php/perlに拡張機能をつけることは可能ですか?
- 11. UbuntuのPythonコードからEXEファイルをビルドすることは可能ですか?
- 12. セレンで低レベルのピクセル検査が可能ですか?
- 13. タイプヒント私は次のコードでのPython 3.5.1でタイプヒントを使用するようにしようとしている
- 14. 有限状態マシンでバイナリツリーを走査することは可能ですか?
- 15. 特定のFacebookユーザーに関連するすべてのコメントを見つけることは可能ですか
- 16. luceneのストアフィールドを検索することは可能ですか
- 17. easybのGroovyを英語のシナリオ定義と分けることは可能ですか?ここで
- 18. PythonファイルをNexusリポジトリにプッシュすることは可能ですか
- 19. 人形ファイルにPythonコードをインポートすることは可能ですか?
- 20. JavaScriptコードをPythonでJSファイルに入れることは可能ですか?
- 21. ユーザープロファイルにすべてのclojureライブラリを含めることは可能ですか?
- 22. バイナリ検索ツリーで要素を見つけることは可能ですか?
- 23. AngularJS分度器検査 - E2E検査には備品が必要ですか?
- 24. 特定のプロトコルを実装するすべてのモジュールを見つけることは可能ですか?
- 25. クラスのすべてのサブクラスを取得することは可能ですか?
- 26. PHP設定ファイルphp.iniを分割することは可能ですか?
- 27. 私のウェブクライアントのプラットフォームを検証可能な方法で検出することは可能ですか?
- 28. Googleドライブから特定のフォルダのすべてのファイルを取得することは可能ですか?
- 29. EclipseでF3を検索することは可能ですか?
- 30. すべてのアダプタ設定をIBM MFPの1つのファイルに含めることは可能ですか
おかげで。 Python 3.6より前に変数型を指定するためのコメントを使用する必要性や、複合型データ型を受け取ったり返す関数では構文があまりにも視覚的にぎこちなすぎるのです。多分私はそれを将来再訪するでしょう。 – Sean