You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何将类泛型化以正确推断其方法的返回类型

解决方案

通过Python泛型体系绑定PGQuery子类的返回类型即可实现需求,具体修改如下:

第一步:引入泛型工具,改造基类定义

from asyncpg import Pool
from typing import TypeVar, Generic

# 定义代表查询返回值的泛型类型变量
T = TypeVar('T')

class PGQuery(Generic[T]):
    async def execute(self, connection: Pool) -> T:
        raise NotImplementedError

class PGQueryExecutor:
    def __init__(self, connection: Pool):
        self._connection = connection

    # 将execute方法声明为泛型方法,绑定输入查询的返回类型
    async def execute(self, query: PGQuery[T]) -> T:
        return await query.execute(self._connection)

第二步:修改查询子类的继承声明,绑定返回类型

from pydantic import BaseModel, parse_obj_as

class QualitySummary(BaseModel):
    count: int
    score: float

# 继承时指定泛型参数为该查询的返回类型
class PGQueryQualitySummary(PGQuery[QualitySummary]):
    def __init__(self, node: str):
        self.node = node

    async def execute(self, connection: Pool) -> QualitySummary:
        result = await connection.fetchrow(...)
        return parse_obj_as(QualitySummary, result)

效果验证

改造完成后,执行原有调用代码:

pgqueryexecutor = PGQueryExecutor(...)
result = await pgqueryexecutor.execute(PGQueryQualitySummary(...))

类型检查工具会自动推导result的类型为QualitySummary,任意PGQuery子类只要在继承时指定对应的泛型参数,都可以自动推导返回类型,完全符合需求。

内容的提问来源于stack exchange,提问作者edoedoedo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:36:03