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

如何基于传入实例方法的返回值为Python函数添加类型注解?

在Python中实现基于输入实例类型的动态返回值类型

在Python里,你可以通过**类型注解(Type Hints)**结合typing模块的泛型工具,实现和你TypeScript示例中一致的效果——让函数返回值类型根据传入实例的meth方法返回类型动态推断。

完整实现代码

from typing import TypeVar, ReturnType

# 定义文档类层级
class DocumentSuperClass:
    pass

class DocumentA(DocumentSuperClass):
    pass

class DocumentB(DocumentSuperClass):
    pass

# 定义泛型变量,约束为SuperClass及其子类
T = TypeVar('T', bound='SuperClass')

class SuperClass:
    doc: DocumentSuperClass

    def meth(self) -> DocumentSuperClass:
        return self.doc

class A(SuperClass):
    doc: DocumentA

    def meth(self) -> DocumentA:
        return self.doc

class B(SuperClass):
    doc: DocumentB

    def meth(self) -> DocumentB:
        return self.doc

# 实现动态返回类型的函数
def a(input: T) -> ReturnType[T.meth]:
    return input.meth()

# 测试
instance_of_doc_a = a(A())
instance_of_doc_b = a(B())

关键说明

  1. 泛型约束:用TypeVar定义绑定到SuperClass的泛型T,确保函数a的输入参数是SuperClass或其子类的实例。
  2. 返回类型推断:ReturnType[T.meth]会自动提取T类型中meth方法的返回类型,让静态类型检查工具(如mypy)能正确识别instance_of_doc_a是DocumentA类型、instance_of_doc_b是DocumentB类型。
  3. 运行时与静态检查:Python本身是动态类型语言,运行时不会强制类型约束,但通过这些注解,你能获得和TypeScript类似的静态类型校验能力,提前规避类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:17:21