2017-12-17 17 views
1

データを前処理してコンストラクタに渡す前に別のメソッドを作成するのは良い方法ですか(前処理が面倒な場合など)Pythonでデータを前処理してクラスコンストラクタに渡す前に

class C(): 
    def __init__(self, input, more_input): 
     self.value = self.prepare_value(input, more_input) 

    def prepare_value(self, input, more_input): 
    #here I actually do some nontrivial stuff, over many lines 
    #for brevity I'm illustrating just a short, one-line operation 
     value = (input + more_input)/2 
     return value 


print(C(10, 33).value) # has value 21.5 
+1

はい。あなたはあなたの用語を正しく理解していないことに注意してください。あなたはコンストラクタの前で前処理をしていません。あなたはコンストラクタでそれをやっています。その決して明確な切口は、常にその賢明か、それは常に賢明ではないと言う。あなたのクラスが何をしているか、あるクラスをあまりにも多くの責任を割り当てて、そのコンストラクタで大量の事前処理を必要とすることによって、あまりにも多くの他の機能に結合するかどうかによって異なります。 –

答えて

1

このようにしたい場合は、2つのことをお勧めします。

  1. @staticmethodデコレータで飾ることにより、prepare_value()方法static methodしてください。クラス自体のインスタンスを変更していないので、値を返すだけでインスタンスのメソッドにするべきではありません。従って、@staticmethod
  2. このメソッドは、_prepare_value()という名前を使用してのみ内部的に使用する必要があることを示します。これは実際に非公開にするわけではありませんが、他の開発者(つまり将来あなた)に「このメソッドは外部で使用するようには設計されていません」と言うことはよく認められています。

全体的に私の提案は、次のようになります。賢明なようだ

class C(): 
    def __init__(self, input, more_input): 
     self.value = self._prepare_value(input, more_input) 

    @staticmethod 
    def _prepare_value(input, more_input): 
     value = (input + more_input)/2 
     return value 
関連する問題