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