python - 書き方 - システム エラーメッセージ一覧




pylintの「公開方法があまりにも少ない」メッセージの意味 (2)

私はいくつかのコードでpylintを実行していて、「パブリックメソッドが少なすぎます(0/2)」というエラーを受け取ります。 このメッセージはどういう意味ですか? pylintのドキュメント役に立たない:

クラスにパブリックメソッドがあまりにも少ない場合に使用されるので、本当に価値があることを確認してください。


あなたがクラスを拡張しているなら、私の提案はこの警告を体系的に無効にして、例えばセロリのタスクの場合に進むことです:

class MyTask(celery.Task):  # pylint: disable=too-few-public-methods                                                                                   
    """base for My Celery tasks with common behaviors; extends celery.Task

    ...             

単一の関数だけを拡張していても、このテクニックを機能させるにはクラスが必要であり、サードパーティのクラスをハッキングするよりも拡張が確実に優れています。


これは、 pylintの盲目的ルールの別のケースです。

「クラスはデータを格納するものではありません」 - これは誤った記述です。 辞書はすべてに良いものではありません。 クラスのデータメンバーは何か意味のあるものであり、辞書項目は何か任意である。 証明: KeyErrorを防ぐためにdictionary.get('key', DEFAULT_VALUE)を実行できますが、デフォルトの__getattr__はありません。

NamedTupleはあまりNamedTupleありません。特にPython 3のtyping.NamedTuplehttps://docs.python.org/3/library/typing.html#typing.NamedTuple : typing.NamedTuple前には、「 NamedTupleから派生したNamedTuple 」のパターンをチェックしてください。 Python 2 - 文字列の記述から作成されたnamedtuplesは、醜い、悪い、そして "文字列リテラルの中でのプログラミング"というのは愚かです。

私は現在の2つの答え(「何か他のものを使うことを検討するが、pylintは必ずしも正しいわけではない」 - 受け入れられたもの、「pylintを使用しないコメントを使う」)に同意するが、私は自分の提案をしている。

これをもう一度指摘しておきます。クラスによってはデータを格納するだけのものもあります。

今では考慮するオプション - property使用しproperty

class MyClass(object):
    def __init__(self, foo, bar):
        self._foo = foo
        self._bar = bar

    @property
    def foo(self):
        return self._foo

    @property
    def bar(self):
        return self._bar

あなたの上には、Value Object(Domain Driven Designのようなもの)ではOKの読み取り専用プロパティがありますが、セッターを提供することもできます。このようにして、あなたのクラスはあなたの持つフィールドを担当することができますいくつかのバリデーションなどをする(もしあなたがセッターを持っていれば、コンストラクターでそれらを使って割り当てることができます。直接self._foo = foo代わりにself._foo = fooですが、セッターは、コンストラクタでカスタム検証が必要な場合)。





pylint