私は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()
クラス内の他のものが結果を使用していますか? *なぜ*あなたはそのような結果を保存しますか?結果を必要とするものはどれも、それらを計算するプロセスをトリガすることができます(結果はキャッシュされます)。 –
あなたのタイトルは、その質問の広範な話題だけでなく、あなたの実際の質問を反映させてください。私はその目的のために私自身の編集をしました。うまくいけば、それは正確な解釈です。 –
一般的に言えば、メソッドが状態をインプレースで変更するとき、Pythonの型は 'None'を返します。例えば。 'list.sort()'と 'list.append()'と 'dict.update()'はすべてオブジェクト状態を変更するので 'None'を返します。 –