[英]Specifying “any” type using Python type hints
我們在Python 3.5應用程序中有一個方法,其中參數中的一個(下例中的new_value
)可以是任何類型,並且我們想知道是否存在可以用於這種情況的類型提示?
def update(self, col_name: str, new_value) -> None:
(我們希望出於文檔目的使用類型提示,以使代碼更易於閱讀)
感謝幫助!
根據您要使用的確切內容,有兩種不同的選擇:
如果您希望基本上完全退出類型檢查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...
如果要指示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...
我個人偏向於使用object
- Any
被專門設計為“橋梁”,使您可以在程序中混合類型化和非類型化的世界。 我個人認為,如果您使這兩個世界保持明顯不同(例如,通過使用完全類型化的“核心”(可能帶有一堆未類型化的代碼來封裝)),而不是使用靜態和動態類型化的方法,則對代碼進行推理更容易。
當然,並非總是可以這樣做...
(我們希望出於文檔目的使用類型提示,以使代碼更易於閱讀)
順便提一句,如果您要使用類型提示,強烈建議您一路走好,並在開發過程中使用mypy等工具對代碼進行類型檢查。
在文檔中使用類型提示很棒,但是如果您的代碼不符合文檔,可能會造成混亂。 由於我們擁有使用這些類型提示自動對代碼進行類型檢查的工具,因此我們也可以這樣做(並獲得額外的保證)。
(實用上,一次嘗試對整個代碼庫進行類型檢查會導致很大的噪音-您可以嘗試做的是逐步對代碼庫進行類型檢查。例如,您可以將mypy配置為僅對一組文件列表進行類型檢查(可能會隨着時間的推移而增長?),進行更嚴格或更松散的檢查(也許基於每個文件),依此類推。這與上面提到的“類型化的核心,未類型化的包裝器”策略很好地配合。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.