子类__init__中定义的'real'属性触发Pylint警告,该如何处理?
关于Pylint警告“attribute 'real' is defined outside init”的疑问与修复方案
问题场景
按照规范,类的属性应在__init__方法中定义,但在Spyder中运行以下代码时,内部类subclass的__init__内定义的self.real却触发了Pylint的“attribute 'real' is defined outside init”警告,代码可正常运行,特此确认警告有效性及修复方案。
代码示例:
class mainclass(): '''main class''' class subclass: '''subclass''' def __init__(self, real=None): ''' subclass constructor''' self.real = real def __init__(self, var1): '''main class construcor''' self.A = {1: self.subclass(), 2: self.subclass()} #...省略无关代码
警告有效性判断
这个警告无效,属于Pylint对嵌套类的误判。你的subclass作为mainclass的内部类,已经在自身的__init__方法中正确初始化了self.real,完全符合属性定义规范,Pylint在此处错误识别了嵌套类的属性定义位置。
修复建议
方法一:添加Pylint忽略注释
在内部类subclass的定义上方添加专用注释,精准忽略该类的误报:
class mainclass(): '''main class''' # pylint: disable=attribute-defined-outside-init class subclass: '''subclass''' def __init__(self, real=None): ''' subclass constructor''' self.real = real def __init__(self, var1): '''main class construcor''' self.A = {1: self.subclass(), 2: self.subclass()}
方法二:升级Pylint版本
部分旧版Pylint存在嵌套类属性检测的bug,升级到最新稳定版(如v2.15及以上)后,该误报大概率会被修复。
方法三:重构代码,移出内部类
若项目允许,将subclass从mainclass内部移至顶层,让Pylint能正确识别属性定义:
class subclass: '''subclass''' def __init__(self, real=None): ''' subclass constructor''' self.real = real class mainclass(): '''main class''' def __init__(self, var1): '''main class construcor''' self.A = {1: subclass(), 2: subclass()}
内容的提问来源于stack exchange,提问作者shoggananna
相关产品推荐
相关产品推荐

