Python单例元类泛型类型标注写法 解决IDE返回类型识别与自动补全问题
单例元类类型标注修复方案
核心逻辑是通过TypeVar绑定实例类型,用typing.Type标注元类__call__方法的cls参数为对应类类型,返回值直接标注为实例类型,即可让IDE正确识别返回值类型,触发正常补全。
完整可运行代码示例
import typing from abc import ABCMeta # 定义绑定实例类型的TypeVar SingletonInstance = typing.TypeVar("SingletonInstance") class Singleton(ABCMeta): def __call__( cls: typing.Type[SingletonInstance], environment: typing.Optional[str] = None, *args, **kwargs ) -> SingletonInstance: # 你的单例逻辑代码 if not hasattr(cls, "_instance"): cls._instance = super(Singleton, cls).__call__(environment, *args, **kwargs) return cls._instance
标注说明
typing.Type[SingletonInstance]明确声明cls参数是某个实例类型对应的类对象- 返回值标注为
SingletonInstance,直接声明方法返回的是类的实例对象 - 该写法兼容所有主流Python类型检查器(mypy、pyright等)和IDE的自动补全逻辑
- 若使用Python 3.10+,可以将
typing.Optional[str]替换为更简洁的str | None写法
内容的提问来源于stack exchange,提问作者George Wright
相关产品推荐
相关产品推荐

