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

如何正确实现__init_subclass__魔术方法?PyCharm签名警告排查

问题原因与解决办法

你的代码在Python语法层面是合法的,但PyCharm的警告源于**object类的__init_subclass__默认签名和你定义的版本不匹配**:

  • 原生object.__init_subclass__的签名为:def __init_subclass__(cls, **kwargs),仅接收类对象和任意关键字参数
  • 你定义的__init_subclass__使用了位置仅参数分隔符/,还要求必须传入base_url位置参数,和父类的签名规则冲突,因此IDE触发了签名不匹配的警告。

如果要消除这个警告,有两种可行方案:

  • 调整签名,将base_url改为关键字参数,同时保留**kwargs以对齐父类签名:
    class BaseNewAdapter:
        def __init_subclass__(cls, base_url: str, **kwargs) -> None:
            super().__init_subclass__(**kwargs)
            cls._base_url = base_url
    
    子类继承时需通过关键字参数传入base_url,示例:class MyAdapter(BaseNewAdapter, base_url="https://example.com"):
  • 若坚持使用位置仅参数,可在方法上方添加PyCharm的忽略注释:
    class BaseNewAdapter:
        # noinspection PyMethodOverload
        def __init_subclass__(cls, /, base_url: str) -> None:
            cls._base_url = base_url
    

内容的提问来源于stack exchange,提问作者Альберт Александров

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:22:06