You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不显式注解,为子类方法复用基类方法的类型提示

如何从基类构造函数获取类型提示来注解子类的**kwargs?

我需要给类A构造函数的参数c添加int类型提示,原始代码如下:

class B:
  def __init__(c: int):
    pass
class A(B):
  def __init__(a: str, **kwargs):
    super().__init__(**kwargs)

我已经知道可以通过显式注解实现:

class B:
  def __init__(c: int):
    pass
class A(B):
  def __init__(a: str, c: int):
    super().__init__(c=c)

我想了解是否可以通过类似以下方式,从基类B的__init__方法获取类型提示来注解**kwargs:

class B:
  def __init__(c: int):
    pass
class A(B):
  def __init__(a: str, **kwargs: GetHintFrom(B.__init__)):
    super().__init__(**kwargs)

目前Python没有直接支持GetHintFrom(B.__init__)这种语法糖式的注解方式,但可以通过以下几种方法实现类似需求:

  • 方法一:用TypedDict复用基类参数类型
    先定义一个对应基类构造参数的TypedDict,子类的**kwargs直接注解为这个字典类型,主流类型检查器(如mypy、pyright)都能正确识别:

    from typing import TypedDict
    
    class BInitParams(TypedDict):
        c: int
    
    class B:
        def __init__(self, c: int):
            pass
    
    class A(B):
        def __init__(self, a: str, **kwargs: BInitParams):
            super().__init__(**kwargs)
    
  • 方法二:Python 3.11+用Unpack解包基类注解
    Python 3.11引入的Unpack类型可以直接解包基类构造函数的参数注解,语法更简洁:

    from typing import Unpack
    
    class B:
        def __init__(self, c: int):
            pass
    
    class A(B):
        def __init__(self, a: str, **kwargs: Unpack[B.__init__.__annotations__]):
            super().__init__(**kwargs)
    
  • 方法三:通过inspect模块动态提取类型
    写一个工具函数提取基类构造函数的参数类型,运行时可以获取到类型提示,但部分类型检查器可能需要额外配置才能识别:

    import inspect
    from typing import Dict, Any
    
    def get_init_param_hints(cls) -> Dict[str, Any]:
        sig = inspect.signature(cls.__init__)
        return {name: param.annotation for name, param in sig.parameters.items() if name not in ('self', 'cls')}
    
    class B:
        def __init__(self, c: int):
            pass
    
    class A(B):
        def __init__(self, a: str, **kwargs: get_init_param_hints(B)):
            super().__init__(**kwargs)
    

其中TypedDict的方式兼顾了类型检查兼容性和代码可读性,是最推荐的方案。

内容的提问来源于stack exchange,提问作者Deo Leung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:26:34