6

我有以下代码:

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' 的实例没有 'name' 成员

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

谢谢

4

3 回答 3

5

最好name在 A 中定义。考虑某人(或几周后的您)想要从 A 继承并实现abstract_function

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

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

c = C()
c.random_function()

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

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

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

于 2013-05-14T08:22:14.670 回答
5

如果你给 A 加上 后缀Mixin,pylint 不会报告它

于 2016-03-02T21:48:14.433 回答
1

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

pylint solution.py --generated-members=name

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

于 2013-05-14T08:26:13.853 回答