簡體   English   中英

Python中的Generics如何處理?

[英]How to deal with Generics in Python?

我在 Python 中有一個關於 generics 的問題。它是關於方法的返回值的,具體來說,我正在尋找一種具有通用返回類型的方法。

例如在 C# 我有這樣的東西:

public async Task<R> PostAsync<T, R>(string url, T body) {
...
...
...
 return JsonConvert.DeserializeObject<R>(responseJson);
}

R 是響應類型,T 是正文的類型。 所以關鍵是要返回 R 的類型。我可以在 Python 中實現這樣的東西嗎? 抱歉,如果這個問題看起來很奇怪,我是 Python 的新手,最初來自 C#,目前正在努力進入 Python。

非常感謝你的幫助!

如果您的目標是為了 static 類型檢查器而使用正確的類型注釋,您可以這樣做:

from typing import Type, TypeVar


R = TypeVar("R")


class BodyType:
    ...


class MyClass:
    ...
    async def post(self, url: str, body: BodyType, return_class: Type[R]) -> R:
        # Do the thing...
        return return_class()

請注意,由於 Python 不是靜態類型的,因此嚴格來說沒有真正等同於通用方法/函數。 沒有用於指示 function 的類型參數的特殊語法。您可以通過簡單地將 class 作為參數傳遞給該方法來實現類似的構造。

通用類型確實存在。 您可以通過從typing.Generic基類 class 繼承來創建您自己的。但同樣,它們在運行時並不重要,主要為了 static 類型檢查器的利益而存在。

如評論中所述,請查看typing模塊和PEP 484 ,了解有關類型提示可用工具的更多詳細信息。

暫無
暫無

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

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