2017-11-28 4 views
1

私はreturn慣例に関する質問をPythonで持っています。私はいくつかのdata属性を持つクラスを持って、私はデータのいくつかの分析を実行し、results属性として結果を格納するいくつかの関数を持っています(以下の単純化された実装を参照してください)。分析関数は主にresults属性を更新するので、私の質問はreturnステートメントの観点からのベストプラクティスです。 (process1のように)関数内のクラス属性の更新を避け、データを返して、それを使用して結果属性を更新する必要がありますか(process2)?オブジェクトの状態を更新して値を返すメンバ関数が一般的ですか?

おかげで、 カムラン

class Analysis(object): 

    def __init__(self, data): 
     self.data = data 
     self.results = None 

    def process1(self): 
     self.results = [i**2 for i in self.data] 

    def process2(self): 
     return [i**2 for i in self.data] 



a = Analysis([1, 2, 3]) 
a.process1() 
a.results = a.process2() 
+3

クラス内の他のものが結果を使用していますか? *なぜ*あなたはそのような結果を保存しますか?結果を必要とするものはどれも、それらを計算するプロセスをトリガすることができます(結果はキャッシュされます)。 –

+0

あなたのタイトルは、その質問の広範な話題だけでなく、あなたの実際の質問を反映させてください。私はその目的のために私自身の編集をしました。うまくいけば、それは正確な解釈です。 –

+1

一般的に言えば、メソッドが状態をインプレースで変更するとき、Pythonの型は 'None'を返します。例えば。 'list.sort()'と 'list.append()'と 'dict.update()'はすべてオブジェクト状態を変更するので 'None'を返します。 –

答えて

0

これは、すべてのユースケースに依存します。

まず、あなたはクラス属性を変更していません。インスタンス属性を変更しています。あなたは、クラスのさまざまなインスタンス間で、あなたのプロセスの結果を共有することを計画している場合は

Python: Difference between class and instance attributes

第二に、そして、あなたはクラス変数を使用することができます。

第3に、インスタンス変数について質問する場合は、設計の選択に依存します。そのほかに

、これは私が推測不要である: -

a.results = a.process2() 

あなたは、単に割り当ては、オブジェクト自体の一部とすること。その機能が必要な場合は、結果を表示するためにa.process2関数を使用することができます。

関連する問題