Python中仅重写子类继承方法的类型注解问题
仅重写子类config方法类型注解的解决方案
你可以通过@overload装饰器在子类中声明特定的类型签名,同时复用父类的config方法实现,无需重复编写逻辑。以下是具体实现:
首先导入必要的类型模块:
from typing import overload, Any
定义父类Root的通用实现:
class Root: def __init__(self): pass def config(self, **kwargs: Any) -> None: # 通用属性赋值逻辑,对所有子类适用 for attr, value in kwargs.items(): setattr(self, attr, value)
子类A的实现(仅添加类型注解,复用父类逻辑):
class A(Root): a: int b: str c: bool def __init__(self, a: int, b: str, c: bool): super().__init__() self.a, self.b, self.c = a, b, c @overload def config(self, a: int, b: str, c: bool) -> None: # 仅声明类型签名,无需实现逻辑 ...
子类B的实现同理:
class B(Root): a: int d: float e: list[str] f: dict[str, int] def __init__(self, a: int, d: float, e: list[str], f: dict[str, int]): super().__init__() self.a, self.d, self.e, self.f = a, d, e, f @overload def config(self, a: int, d: float, e: list[str], f: dict[str, int]) -> None: ...
说明
@overload用于为子类的config方法提供精确的类型签名,类型检查器(如mypy、pyright)会据此校验参数类型。- 运行时实际执行的是父类
Root中的config方法逻辑,完全无需在子类中重复编写实现代码。 - 如果你的Python版本低于3.11,需要确保类型检查器支持
@overload的继承场景,主流工具均已支持。
内容的提问来源于stack exchange,提问作者Christian Patzl
相关产品推荐
相关产品推荐

