web-dev-qa-db-ja.com

Python-ヘルパー関数をクラスの内部または外部に配置する必要がありますか?

Pythonでは、クラスの一部のメソッドでヘルパー関数が必要ですが、ヘルパー関数自体がクラス内で何も使用しない場合、ヘルパー関数をクラスの内部または外部に配置する必要がありますか?

私はそれを中に入れてみましたが、PyLintはこの関数が外部に入れられた可能性があると不平を言っていました。

@カール:

クラスはソフトウェアアップグレードであり、フォルダーがまだ存在しない場合、ヘルパー関数は新しいフォルダーを作成します。クラスは、現在のところクラスのコードのみをほとんど備えているモジュール内にあります。他のクラスは後で追加される可能性があります。

47
Jack Z

ヘルパー関数をどこに置くかを決めるとき、私が尋ねる質問は、「このクラスだけですか?」です。他の場所で役立つ場合は、モジュールレベルで行います。それがこのクラスだけに当てはまる場合、staticmethod(クラスのデータを必要としない)またはclassmethod(クラスではなくインスタンスのデータを使用)のいずれかでクラスに入ります。その仕事をする)。

別のpythonコードチェッカーは pyflakes です。

52
Ethan Furman

ヘルパー関数は、クラスではなくモジュールレベルでより適切に適合する可能性があります。

これに当てはまらない場合は、クラス内の関数で使用できる staticmethod decorator があります。簡単に言うと、静的メソッドは、同じクラスのオブジェクトのインスタンス化間で同じように動作します。インスタンスデータには依存しません。

このため、staticmethodデコレータは、ドキュメントに記載されているように、暗黙的な最初の引数(通常はself)を取らないように、関数の動作をレンダリングします。

9
Brian