2017-09-05 3 views
0

私のテストスイートでは、 "utils.py"というファイルがあります。このファイルでは、多くのテストで必要な機能が用意されています。これを達成するために、私は "Utils"クラスを作成し、内部にすべての関数を持っていました。グローバル関数をクラスの一部にすることはPythonicですか?

Pythonの経験が豊富な同僚は、そのようなクラスがなくてはならないと主張し、代わりにこれらの関数のすべてをトップレベルにする必要があります。したがって、 "Utils.get_feature_id()"は "get_feature_id()"になりました。

あなたは彼の主張に同意しますか?

この場合、ロバート

+0

これは主に個人的な好み(プロジェクトの残りの部分との一貫性など)の問題です。クラスが単に関数をグループ化するためだけに存在する場合、私は個人的には同僚と向き合い、モジュールがカプセル化のより良い単位であると主張します。 – NPE

+0

私は@ NPEに同意します。 – direprobs

+2

PythonはJavaではありません。あなたはすべてをクラスに拘束する必要はありません。 – user2357112

答えて

5

、あなたがclassを使用している唯一のことは、本質的に、名前空間内の「メソッド」を持つことです。私はあなたの同僚に同意します。あなたはこれらの機能をトップレベルにすることができますが、モジュールに入れておくことで、実際にネームスペースに入れることができます。代わりに、あなたがもう一度だけ、不要なレイヤを追加します@staticmethodなど、すべてのメソッドをマーク推測でしょう以下の

import utils 
utils.get_feature_id() 

import utils 
utils.Utils.get_feature_id() 
1

はい。関数がselfにアクセスしない場合は、ほとんどの場合メソッドではありません。別の名前空間に関数を配置することが目標だった場合は、フルモジュールを使用できます。 Pythonはどこにでも名前空間を使用していますので、C++のようなグローバル名やJavaの強制などを避ける必要はありません(結局のところ、グローバルではないからです)。

関連する問題