如何避免Python 3中继承类构造函数的Pylint警告?

8 投票
2 回答
9277 浏览
提问于 2025-04-17 21:11

在Python 3中,我有以下代码:

class A:
    def __init__(self):
        pass

class B(A):
    def __init__(self):
        super().__init__()

这段代码会引发Pylint的警告:

  • 定义了旧式类。(old-style-class)
  • 在旧式类上使用super。(super-on-old-class)

我理解的是,在Python 3中已经没有旧式类了,所以这段代码应该没问题。

即使我在这段代码中明确使用了新式类:

class A(object):
    def __init__(self):
        pass

class B(A):
    def __init__(self):
        super().__init__()

我仍然会收到Pylint的警告,因为在Python 3中调用父类构造函数的语法不同:

  • 缺少super()的参数。(missing-super-argument)

那么,我该如何告诉Pylint我想检查Python 3的代码,以避免这些提示(而不禁用Pylint的检查)呢?

2 个回答

5

根据这个列表,'缺少对super()的参数'的代码是E1004。如果你只想关闭一种类型的警告,可以在文件的开头添加这一行:

# pylint: disable=E1004

或者你可以试着这样调用super()

class B(A):
  def __init__(self):
    super(B, self).__init__()
-1

这是因为astroid这个工具里有个小错误,它在Python 3之前没有把所有的类都当作新风格的类来处理。这个问题在这里被修复了:https://bitbucket.org/logilab/astroid/commits/6869fb2acb9f58f0ba2197c6e9008989d85ca1ca

这个修复很快就会发布出来。

撰写回答