2
我想寫使用Python 3.6類型提示來檢查的參數的字典尊重類型提示,如果不提高有清晰的描述錯誤的函數裝飾該問題將用於HTTP API。覈對聯盟類型的變量在運行時在Python 3.6
的問題是,當函數使用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,似乎沒有辦法從任何其他'Generic'解析'Union',因爲'isinstance'失敗: ( –