Python 3.6型ヒントを使用して、引数の辞書が型ヒントを尊重しているかどうかを確認する関数デコレータを作成しようとしています。 HTTP APIに使用される問題の数です。実行時にPython 3.6で実行時にUnion型の変数をチェックする
問題は、関数がUnion
型を使用するパラメータを持っている場合、実行時に変数をチェックできないという問題です。例えば
、私は私が行うことができます
from typing import Union
def bark(myname: str, descr: Union[int, str], mynum: int = 3) -> str:
return descr + myname * mynum
この機能を持っている:
isinstance('Arnold', bark.__annotations__['myname'])
でもない:
isinstance(3, bark.__annotations__['descr'])
をUnion
がisinstance
またはissubclass
で使用することはできませんので。
タイプオブジェクトを使用して確認する方法が見つかりませんでした。 自分でチェックを実装しようとしましたが、bark.__annotations__['descr']
がREPLにtyping.Union[int, str]
と表示されていますが、実行時にタイプのリストにアクセスできない場合は、bark.__annotations__['descr'].__repr__()
という醜いハッキングを使用しないといけません。
この情報にアクセスする適切な方法はありますか?または、意図的に実行時に簡単にアクセスできないように意図されていますか?
Python 3.5では 'Union [int、str] .__ union_args__'を使用しましたが、3.6では' isinstance'が失敗するため、他の 'Generic'から' Union'を解決できません。 ( –