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

Python 3: Accessing Parent Attributes, Linter Error

我在 Python 3.8 中使用 VS Code 和 PyLint 正确访问父属性时遇到一些问题。

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 在“self”下划线。以红色表示:

在定义第 8 行之前访问成员 'parentAttr'。pylint(access-member-before-definition)

        tmp = self.parentAttr
        self.parentAttr= tmp 

代码正常工作。但是我应该如何正确地做这些事情而不出现这个错误呢?

您确定文件 2 的第 7 行或文件 1 的第 3 行没有错字吗?您是否正在导入您认为正在导入的“父级”class?我尝试重现你的问题,vscode+pylint 没有在我的机器上抱怨你的代码。

老实说,我不明白为什么会这样,您做的是对的,至少在您提供的 pseudo-code 中是这样。如果它抱怨,那一定是因为某个地方的拼写错误,以及您尚未检测到的代码中的潜在错误。

我同意 Olivier 的观点——鉴于您在单个文件或多个文件中的伪代码,我无法复制它。

有时会出现pylint无法处理的问题,但这很简单,应该没问题。

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

  1. 创建一个虚拟 class var(即在 init 函数之外),当 __init__() 被调用时被覆盖
  2. 使用 # pylint: disable=access-member-before-definition 或短代码形式手动抑制 pylint 警告,例如 # pylint: disable=E1101
  3. 调查抽象基础classes
  4. 为您的特定用例(例如 django 的)获取一个合适的 plyint 插件,它有额外的逻辑来处理那些特定的动态属性