继承抽象类未调用父类构造触发pylint的super-init-not-called警告怎么解决
解决pylint未调用父类构造函数警告的方案
以下是三种常用的处理方式,可根据实际场景选择:
- 局部行内禁用(最推荐)
仅在当前不需要调用父类构造函数的子类__init__方法上添加禁用注释,不会影响其他代码的检查逻辑:
class Father: def __init__(self): pass class Son(Father): # 仅对当前方法禁用super-init-not-called警告 def __init__(self): # pylint: disable=super-init-not-called self.salary = 700 def __repr__(self): return f"my salary is {self.salary}" print(Son())
修改后重新执行pylint检查即可消除该警告。
- 全局禁用警告
如果项目中存在大量同类合法场景,可在pylint配置文件中全局关闭该检查规则:
- 在项目根目录新建
.pylintrc配置文件 - 添加如下配置项:
[MESSAGES CONTROL] disable=super-init-not-called
注意:该方案会全局关闭该规则的校验,可能遗漏确实需要调用父类构造函数的风险场景,非必要不推荐使用。
- 抽象类场景规范改造
如果父类本身是设计为无需实例化的抽象基类,可将父类改造为Python标准抽象类,多数版本的pylint会自动识别该场景,不需要额外禁用规则即可消除警告:
from abc import ABC class Father(ABC): def __init__(self): pass class Son(Father): def __init__(self): self.salary = 700 def __repr__(self): return f"my salary is {self.salary}"
该方案符合Python代码规范,适合可以调整父类定义的场景。
内容的提问来源于stack exchange,提问作者OrenIshShalom
相关产品推荐
相关产品推荐

