簡體   English   中英

使用Python類型提示指定“ any”類型

[英]Specifying “any” type using Python type hints

我們在Python 3.5應用程序中有一個方法,其中參數中的一個(下例中的new_value )可以是任何類型,並且我們想知道是否存在可以用於這種情況的類型提示?

def update(self, col_name: str, new_value) -> None:

(我們希望出於文檔目的使用類型提示,以使代碼更易於閱讀)

感謝幫助!

根據您要使用的確切內容,有兩種不同的選擇:

  1. 如果您希望基本上完全退出類型檢查any_value並表明它實際上可以是任何具有零限制的類型,請使用typing.Any 例:

     from typing import Any class MyThing: def update(self, col_name: str, new_value: Any) -> None: # Note: this typechecks; new_value can be anything, and # that object might have a foo method new_value.foo() # ...snip... 
  2. 如果要指示new_value可以是任何類型,但也要確保update方法僅以完全類型安全的方式使用new_value ,則可以使用object ,它是Python中每種類型的基本類型:

     class MyThing: def update(self, col_name: str, new_value: object) -> None: # Note: this does not typecheck since new_value is of # type 'object', and 'object' is not guaranteed to have # a method named 'foo' new_value.foo() # ...snip... 

我個人偏向於使用objectAny被專門設計為“橋梁”,使您可以在程序中混合類型化和非類型化的世界。 我個人認為,如果您使這兩個世界保持明顯不同(例如,通過使用完全類型化的“核心”(可能帶有一堆未類型化的代碼來封裝)),而不是使用靜態和動態類型化的方法,則對代碼進行推理更容易。

當然,並非總是可以這樣做...

(我們希望出於文檔目的使用類型提示,以使代碼更易於閱讀)

順便提一句,如果您要使用類型提示,強烈建議您一路走好,並在開發過程中使用mypy等工具對代碼進行類型檢查。

在文檔中使用類型提示很棒,但是如果您的代碼不符合文檔,可能會造成混亂。 由於我們擁有使用這些類型提示自動對代碼進行類型檢查的工具,因此我們也可以這樣做(並獲得額外的保證)。

(實用上,一次嘗試對整個代碼庫進行類型檢查會導致很大的噪音-您可以嘗試做的是逐步對代碼庫進行類型檢查。例如,您可以將mypy配置為僅對一組文件列表進行類型檢查(可能會隨着時間的推移而增長?),進行更嚴格或更松散的檢查(也許基於每個文件),依此類推。這與上面提到的“類型化的核心,未類型化的包裝器”策略很好地配合。)

暫無
暫無

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

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