如何为返回子类的Python方法添加类型提示?
解决Python前向引用的类型提示问题
针对你遇到的父类中引用未定义子类导致类型提示报错的问题,有几种简洁的解决方式:
方法1:使用字符串字面量(Python 3.7+)
直接将返回类型用字符串包裹,类型检查器会自动识别该字符串作为前向引用的类型:
class A: def get_b(self) -> "B": # 用字符串标记未定义的B类 return B() # 返回B类实例示例 class B(A): pass
方法2:导入__future__.annotations(Python 3.7+)
在文件顶部导入该模块后,所有类型注解会被当作字符串处理,自动解决前向引用问题,无需手动给类型加引号:
from __future__ import annotations class A: def get_b(self) -> B: # 直接写B即可,注解会被视为字符串 return B() class B(A): pass
该特性在PEP 484的「前向声明问题」章节中有相关规范说明。
方法3:使用typing.ForwardRef(Python 3.6+)
适合Python 3.6及更早版本,显式创建前向引用对象:
import typing class A: def get_b(self) -> typing.ForwardRef("B"): return B() class B(A): pass
不过这种方式相对前两种不够简洁,3.7+版本更推荐前两种方案。
内容的提问来源于stack exchange,提问作者Olivier Verdier
相关产品推荐
相关产品推荐

