1 回答

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊
MyPy 將文字推斷為它們的內(nèi)置類型,而不是Literal
它們的值。
mypy文檔 ? 文字類型
您必須顯式向變量添加注釋以聲明它具有文字類型。[..] 沒有此注釋的變量不被假定為文字。
為了允許推斷Literal
值,請(qǐng)將變量注釋為Final
:
from typing import Final
from typing_extensions import Final
bar: Final = "bar"
reveal_type(bar)? # Revealed type is 'Literal['bar']?'
將變量注釋為Final表示其值不會(huì)被類似類型的值替換。這使得將類型推斷為特定Literal值而不僅僅是一般類型是正確的。
Literal請(qǐng)注意,此推斷是上下文相關(guān)的:對(duì)于所有需要 a 的情況都會(huì)推斷出類型Literal。對(duì)于需要類型的情況,無論是文字類型、基本類型還是 TypeVar,該類型都會(huì)被推斷為通用類型。
reveal_type([bar])? # Revealed type is 'builtins.list[builtins.str*]'
添加回答
舉報(bào)