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

A をサフィックスにするとMixin、pylint はそれを報告しません。

于 2016-03-02T21:48:14.433 に答える
5

Aで定義するのが最善ですname。誰か (または数週間以内にあなた) が A から継承し、実装したいと考えてくださいabstract_function:

class C(A):
    def abstract_function(self):
        print 'This 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 エラーも解消されます。

于 2013-05-14T08:22:14.670 に答える
1

あなたの場合、次のオプションを使用できます。

pylint solution.py --generated-members=name

ただし、name = None基本クラスに追加することを検討することをお勧めします。

于 2013-05-14T08:26:13.853 に答える