Python包中@override装饰器的版本兼容问题与解决方法
兼容低版本Python的@override装饰器实现方案
方案一:条件导入+自定义空装饰器
因为@override本质是仅用于静态类型检查的标记装饰器,运行时不会执行任何逻辑,所以可以针对低版本Python定义空装饰器替代:
try: # Python 3.12+ 直接用标准库的override from typing import override except ImportError: # 低版本Python自定义空装饰器 def override(func): return func class Parent: def my_method(self): return 1 class Child(Parent): @override def my_method(self): return 2
该方案无需额外依赖,纯代码兼容,适合不想引入第三方库的场景。
方案二:使用typing-extensions库
typing-extensions是官方维护的库,专为旧版本Python提供新类型提示特性,其中包含override装饰器:
在包的依赖配置中添加
typing-extensions(以pyproject.toml为例),仅对低于3.12的Python版本生效:dependencies = [ "typing-extensions>=4.6.0; python_version < '3.12'" ]代码中条件导入:
import sys if sys.version_info >= (3, 12): from typing import override else: from typing_extensions import override class Parent: def my_method(self): return 1 class Child(Parent): @override def my_method(self): return 2
该方案能让低版本Python获得和3.12+一致的静态检查支持,适合对类型提示严谨性要求高的项目。
内容的提问来源于stack exchange,提问作者Atharva
相关产品推荐
相关产品推荐

