如何在Python中处理泛型?

fumotvh3  于 2022-10-02  发布在  Python
关注(0)|答案(1)|浏览(142)

关于Python中的泛型,我有一个问题。它是关于方法的返回值的,特别是我正在寻找一种拥有泛型返回类型的方法。

例如,在C#中,我有这样的代码:

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

R是响应类型,T是正文的类型。所以重点是返回一种类型的R,我能用Python语言实现这样的东西吗?对不起,如果这个问题看起来很奇怪,我是一个完全不熟悉Python的人,最初是从C#开始的,目前正在努力进入到Python中。

非常感谢你的帮助!

rekjcdws

rekjcdws1#

如果您的目标是为了静态类型检查器而拥有适当的类型注解,您可以这样做:

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不是静态类型的,严格地说,没有真正等同于泛型方法/函数的东西。没有用于指示函数的类型参数的特殊语法。只需将类作为参数传递给方法,即可实现类似的构造。

不过,泛型类型确实存在。您可以通过继承typing.Generic基类来创建自己的。但同样,它们在运行时并不重要,主要是为了静态类型检查器的好处而存在。

正如评论中提到的,请查看typing模块和PEP 484,以了解有关可用于类型提示的工具的更多详细信息。

相关问题