繁体   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