App下載

Python3.6如何添加類型注釋的驗(yàn)證?

猿友 2021-07-28 10:41:33 瀏覽數(shù) (1616)
反饋

今天小編為各位帶來(lá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開始可用。在較早的版本中可能不會(huì),因?yàn)榇蜃秩匀皇桥R時(shí)的。

在內(nèi)省類型的內(nèi)部接口被充實(shí)和輸入從臨時(shí)狀態(tài)結(jié)束之前,您應(yīng)該預(yù)料到由于API的更改而導(dǎo)致的破壞。


0 人點(diǎn)贊