簡體   English   中英

使用非類型對象注釋參數

[英]Annotating parameters with non-type objects

我正在開發一個使用 python 函數並將它們轉換為容器化程序的框架。 我需要一種用一些擴展信息注釋函數參數的方法。 為此,我開始使用 Python 的“參數注釋”/“類型提示”。 然而,我聽到一些傳言說,將來不是類型的注釋將成為非法的。 真的嗎? 我的框架可以在注釋中使用非類型對象嗎?

def my_func(
    param1: 'foo',
    param2: 'foo bar',
    param3: {'a' : 1},
):
    pass

當 PEP-484 發布時,它特別允許出於您喜歡的任何目的繼續使用函數注釋:

請注意,此 PEP 仍然明確不阻止注釋的其他使用,也不需要(或禁止)任何特定的注釋處理,即使它們符合本規范。 它只是實現了更好的協調,就像 PEP 333 為 Web 框架所做的那樣。

PEP-484 只是標准化了類型提示應該是什么樣子,如果注釋用於提示。


然而,PEP-563 包含一個似乎與此相矛盾或覆蓋的注釋:

注釋的非打字用法

盡管除了類型檢查之外,注釋仍然可以任意使用,但值得一提的是,該 PEP 及其前身(PEP 484 和 PEP 526)的設計主要受類型提示用例的啟發。

在 Python 3.8 中,PEP 484 將從臨時狀態畢業。 Python 編程語言的其他增強功能,如 PEP 544、PEP 557 或 PEP 560,已經在此基礎上構建,因為它們依賴於 PEP 484 定義的類型注釋和類型模塊。 事實上,PEP 484 之所以保留Python 3.7 中的臨時版本是為了實現上述某些增強功能所需的另一個發布周期的快速演變。

考慮到這一點,與上述 PEP 不兼容的注釋的使用應被視為已棄用。

但是,在 563 之后,我沒有看到任何提到函數注釋的 PEP,只有變量注釋。


暫時建議您可以繼續使用函數注釋,只要您知道這種使用與mypy工具不兼容。

from __future__ import annotations停止對from __future__ import annotations的評估並將它們視為原始字符串(這將成為 Python 4 中的默認行為)這一事實表明,如果您現在堅持使用字符串,那么使用將繼續沒有運行時后果非類型提示注解。 (也就是說,不要依賴您的注釋來實際評估。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM