Pylint の「インスタンス属性が多すぎます」というメッセージに対処するにはどうすればいいですか? 質問する

Pylint の「インスタンス属性が多すぎます」というメッセージに対処するにはどうすればいいですか? 質問する

私はPylintでいくつかのコードをlintしてみましたが、最後に残ったエラーは

R0902: too-many-instance-attributes (8/7)

インスタンス属性の数を制限する理由は理解できますが、7 個というのは少し少ないように思えます。また、リンターが最終的な決定権を持つべきではないことも理解しています。ただし、代わりに何をすべきかを知りたいと思います。

def __init__(self, output_file=None, output_dir=None):
    """
    Set the frobnicator up, along with default geometries
    """

    self.margin = 30

    self.pos = [0, 0]
    self.sep = [5, 5]

    self.cell = [20, 20]

    self.frobbr = library.Frobbr()

    page = self.frobbr.get_settings('page')

    self.lim = [page.get_width() - self.margin,
                page.get_height() - self.margin]

    self.filename = output_file
    self.moddir = output_dir

ジオメトリを辞書にパッケージ化すべきでしょうか、それとも Pylint のエラーを止めるために何か他のことをするべきでしょうか、それとも単に無視するべきでしょうか (これはあまりしたくありません)?

ベストアンサー1

リンターの役割は、コードに潜在する問題を認識させることであり、質問にあるように、リンターが最終的な決定を下すべきではありません。

pylint の指示を考慮し、このクラスに対して、持っている属性が適切であると判断した場合 (これは妥当なように思われます)、クラスに無効化コメントを追加することで、エラーを抑制し、問題を考慮したことを示すことができます。

class Frobnicator:

    """All frobnication, all the time."""

    # pylint: disable=too-many-instance-attributes
    # Eight is reasonable in this case.

    def __init__(self):
        self.one = 1
        self.two = 2
        self.three = 3
        self.four = 4
        self.five = 5
        self.six = 6
        self.seven = 7
        self.eight = 8

そうすれば、Pylint を無視したり、その奴隷になったりするのではなく、役に立つけれども誤りのあるツールとして Pylint を使用することになります。

デフォルトでは、ローカルでチェックを無効にすると、Pylint は情報メッセージを生成します。

 Locally disabling too-many-instance-attributes (R0902) (locally-disabled)

予防できるそれメッセージは、次の 2 つの方法のいずれかで表示されます。

  1. pylint を実行するときにフラグを追加しますdisable=

    $ pylint --disable=locally-disabled frob.py 
    
  2. 設定ファイルにディレクティブを追加しますpylintrc

    [MESSAGES CONTROL]
    disable = locally-disabled
    

おすすめ記事