如何为接收类类型参数的方法标注一致的返回类型?
解决泛型函数接受类型参数的返回类型标注问题
你目前的代码标注仅支持传入类的实例,要实现直接传入类本身并返回该类的实例,需要调整参数的类型标注:
修改后的核心代码
import typing from typing import TypeVar, Type ChildT = TypeVar("ChildT") def load_child(child_type: Type[ChildT], child_name: str) -> ChildT: # 可根据child_name添加自定义初始化逻辑 return child_type()
关键说明
Type[ChildT]用于标注参数child_type是ChildT对应的类本身,而非类的实例- 返回类型标注为
ChildT,表示函数返回该类的实例 - 此时调用
test_frame = load_child(FrameType, "some_frame")会被类型检查器正确识别,test_frame的类型会被推断为FrameType
兼容实例调用的扩展方案
如果需要同时支持传入类实例的场景,可以使用联合类型标注:
def load_child(child_type: typing.Union[Type[ChildT], ChildT], child_name: str) -> ChildT: if isinstance(child_type, type): return child_type() else: # 按需处理实例逻辑,比如返回实例本身或重新初始化 return child_type.__class__()
内容的提问来源于stack exchange,提问作者JD.
相关产品推荐
相关产品推荐

