Python如何为基类方法标注对应子类重写属性的返回类型提示
from typing import Any, TypeVar, Generic # 定义泛型参数绑定返回类型 T = TypeVar('T') class BaseCls(Generic[T]): # 标注类属性为T的类型对象 RETURNS_TYPE: type[T] = NotImplemented def cast_to_return_type(self, value: Any) -> T: # 这里替换为你实际的业务逻辑 return self.RETURNS_TYPE(value) # 子类继承时传入对应返回类型作为泛型参数 class IntCls(BaseCls[int]): RETURNS_TYPE = int class StrCls(BaseCls[str]): RETURNS_TYPE = str
上述写法在PyCharm、VSCode(搭载Pylance插件)中都可以正确识别返回类型:
- 调用
IntCls().cast_to_return_type("123")会被识别为返回int类型 - 调用
StrCls().cast_to_return_type(123)会被识别为返回str类型
如果你使用的Python版本低于3.9,需要额外从typing导入
Type,并将RETURNS_TYPE: type[T]替换为RETURNS_TYPE: Type[T]。
原理说明:
通过泛型参数T将基类的RETURNS_TYPE类属性和方法返回值做了强绑定,子类继承基类时传入对应类型参数后,类型检查器可以直接关联子类的属性定义和方法返回值,不需要额外的推断逻辑,完全符合Python的类型标注规范。
内容的提问来源于stack exchange,提问作者Titus P
相关产品推荐
相关产品推荐

