抽象成员变量的Pylint错误

时间:2013-05-14 07:51:07

标签: python pylint

我有以下代码:

class A(object):
    def random_function(self):
        print self.name

    def abstract_function(self):
        raise NotImplementedError("This is an abstract class")

class B(A):
    def __init__(self):
        self.name = "Bob"
        super(B, self).__init__()

    def abstract_function(self):
        print "This is not an abstract class"

Pylint报告错误:

  

ID:E1101 A.random_function:“A”的实例没有“名称”成员

这是真的,但我不在乎,因为A是抽象的。有没有办法摆脱这个警告而不仅仅是压制它?

由于

3 个答案:

答案 0 :(得分:5)

最好在A中定义名称。考虑某人(或者你在几周内)想要从A继承并实现abstract_function:

class C(A):
    def abstract_function(self):
        print 'his is not an abstract class'

现在,即使C中没有任何内容出现错误,以下内容也会引发错误:

c = C()
c.random_function()

如果你在A中使用self.name,它应该在那里定义(并且假设它应该默认为合理的东西,说它还没准备好使用):

class A(object):
    name = None
    def random_function(self):
        print self.name

这将使您的代码更清晰/更不容易出错,您还可以摆脱pylint错误。

答案 1 :(得分:3)

如果您使用Mixin后缀A,则pylint不会报告

答案 2 :(得分:1)

在您的情况下,我可以使用以下选项:

pylint solution.py --generated-members=name

但是,最好考虑将name = None添加到基类。