如何为包装函数复用原函数的返回类型注解?避免重复定义
复用Python函数的返回类型注解避免重复定义
针对该场景,要让包装函数parse_from_something的返回类型与parse完全一致且无需重复编写类型,可通过以下方式实现:
方法:使用ReturnType提取函数返回类型
Python 3.10及以上版本的标准库typing模块提供了ReturnType工具,专门用于提取函数的返回类型注解。若使用更早的Python版本,可安装typing_extensions库来使用该功能。
代码示例
from typing import Union, List, ReturnType # 若Python版本<3.10,替换为:from typing_extensions import ReturnType def parse(what: str) -> Union[None, int, bool, float, complex, List[int]]: # 函数实现逻辑 pass class SomeType: def extract_string(self) -> str: # 函数实现逻辑 pass def parse_from_something(which: SomeType) -> ReturnType[parse]: return parse(which.extract_string())
原理说明
ReturnType[parse]会直接引用parse函数的返回类型注解,后续若parse的返回类型发生变更,parse_from_something的返回类型会自动同步,无需手动修改,彻底避免了代码重复和类型不一致的问题。
备选方案:直接访问__annotations__(不推荐)
虽然可以通过parse.__annotations__['return']直接获取返回类型,但这种方式属于访问内部属性,可读性差且部分静态类型检查工具无法正常识别,因此不建议使用。
内容的提问来源于stack exchange,提问作者Marcus Müller
相关产品推荐
相关产品推荐

