如何基于传入实例方法的返回值为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())
关键说明
- 泛型约束:用
TypeVar定义绑定到SuperClass的泛型T,确保函数a的输入参数是SuperClass或其子类的实例。 - 返回类型推断:
ReturnType[T.meth]会自动提取T类型中meth方法的返回类型,让静态类型检查工具(如mypy)能正确识别instance_of_doc_a是DocumentA类型、instance_of_doc_b是DocumentB类型。 - 运行时与静态检查:Python本身是动态类型语言,运行时不会强制类型约束,但通过这些注解,你能获得和TypeScript类似的静态类型校验能力,提前规避类型错误。
内容的提问来源于stack exchange,提问作者nbrustein
相关产品推荐
相关产品推荐

