问题描述
我在使用VS Code和PyLint在Python 3.8中正确访问父级属性时遇到麻烦。
PyLint在下面列出的伪代码中的第二个文件中给我一个错误。
文件1:
class Parent:
def __init__(self,parentAttr):
self.parentAttr= parentAttr
文件2:
class Child(Parent):
def __init__(self,parentAttr,childAttr):
super().__init__(parentAttr)
self.childAttr= childAttr
def anyFunction(self):
在下一行(第7行)中,Linter强调了“自我”。以红色表示:
在其定义行8之前访问成员'parentAttr'。pylint(access-member-before-deFinition)
tmp = self.parentAttr
self.parentAttr= tmp
代码可以正常工作。但是我应该如何正确地做这些事情而又不会出现此错误呢?
解决方法
您确定在文件2的第7行或文件1的第3行没有错字吗?您要导入自己认为要导入的“父类”吗?我尝试重现您的问题,而vscode + pylint并没有抱怨您的计算机上的代码。
老实说,我不明白为什么会这样,至少在您提供的伪代码中,您在做正确的事情。如果它抱怨,那一定是由于某处的错字,以及您尚未检测到的代码中的潜在错误。
,我同意奥利维尔(Olivier)的观点-考虑到您的伪代码,我无法在单个文件或多个文件中复制此代码。
有时候pylint无法解决问题,但这很简单,应该没问题。
在更复杂的示例中,您的选择如下:
- 创建一个虚拟类var(即在init函数之外),该类在调用
__init__()
时将被覆盖 - 使用
# pylint: disable=access-member-before-definition
或短代码形式(例如# pylint: disable=E1101
)手动禁止显示pylint警告 - 研究抽象基类
- 针对您的特定用例(例如django)获得适当的plyint插件,该插件具有处理这些特定动态属性的其他逻辑