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.NamedTuple
: https://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
ですが、セッターは、コンストラクタでカスタム検証が必要な場合)。