【问题标题】:Python 3: Accessing Parent Attributes, Linter ErrorPython 3:访问​​父属性,Linter 错误
【发布时间】:2020-12-10 18:33:46
【问题描述】:

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

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

        tmp = self.parentAttr
        self.parentAttr= tmp 

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

【问题讨论】:

    标签: python inheritance pylint linter


    【解决方案1】:

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

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

    【讨论】:

    • 我明白了。我将这两个文件放在一个较小的目录中(未更改)。我没有这些错误。我发现父类的导入以某种方式被检测为来自 pylint 的错误。 “无法导入'父'pylint(导入错误)”。它具有相同的文件夹结构。很奇怪。
    • 我发现了问题。在我遇到问题的目录中,一个空的自动生成文件“init.py”导致了问题。我删除了这个文件。现在可以了。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 2014-03-25
      相关资源
      最近更新 更多