Python 3:访问​​父级属性,Linter错误

问题描述

我在使用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并没有抱怨您的计算机上的代码。

enter image description here

老实说,我不明白为什么会这样,至少在您提供的伪代码中,您在做正确的事情。如果它抱怨,那一定是由于某处的错字,以及您尚未检测到的代码中的潜在错误。

,

我同意奥利维尔(Olivier)的观点-考虑到您的伪代码,我无法在单个文件或多个文件中复制此代码。

有时候pylint无法解决问题,但这很简单,应该没问题。

在更复杂的示例中,您的选择如下:

  1. 创建一个虚拟类var(即在init函数之外),该类在调用__init__()时将被覆盖
  2. 使用# pylint: disable=access-member-before-definition或短代码形式(例如# pylint: disable=E1101)手动禁止显示pylint警告
  3. 研究抽象基类
  4. 针对您的特定用例(例如django)获得适当的plyint插件,该插件具有处理这些特定动态属性的其他逻辑