今天小編為各位帶來的是一位開發(fā)者詢問Python3.6如何添加類型注釋驗證,希望能對各位有所幫助。
我有一個使用?__annotations__
?字典的方法來檢查類的所有屬性是否有正確的值。它對于基本類型(如?int
?、?str
?或?bool
?)非常適用,但對于更復(fù)雜的元素(如?typing
?)則不適用。工會或打字??蛇x(也是一個聯(lián)盟)。
失敗是由Union對象中的isinstance()方法引起的,該方法拋出TypeError。我甚至找不到一種方法來確保注釋是一個?Union
?,因此我無法驗證一個值是否符合某個類型。
解決方法:
這個想法,正如GvR對這個問題的評論中提到的,是實現(xiàn)你自己的?issubclass/isinstance
?版本,使用一些附加到類型的額外元數(shù)據(jù):
>>> Union[int, str].__args__
(int, str)
>>> Union[int, str].__origin__
typing.Union
?__args__
?和?__origin__
?從Python 3.6.3開始可用。在較早的版本中可能不會,因為打字仍然是臨時的。
在內(nèi)省類型的內(nèi)部接口被充實和輸入從臨時狀態(tài)結(jié)束之前,您應(yīng)該預(yù)料到由于API的更改而導(dǎo)致的破壞。