如何正确实现__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_urlbase_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,提问作者Альберт Александров
相关产品推荐
相关产品推荐

