2016-07-28 9 views
0

私は現在、それぞれが時系列データ(主に配列)の変換を行う多くのメソッドを持つPythonクラスを持っています。各関数の入力は前の関数の出力に依存しているので、各メソッドは特定の順序で呼び出さなければなりません。したがって、私のコードの構造は、次のようになります。Pythonスクリプトで配列データを変換するためのデザインパターン

class Algorithm: 

    def __init__(self, data1, data2): 
    self.data1 = data1 
    self.data2 = data2 

    def perform_transformation1(self): 
    ...perform action on self.data1 

    def perform_transformation2(self): 
    ...perform action on self.data1 

etc.. 

スクリプトの一番下で、私はクラスをインスタンス化してから手続き、インスタンス上の各メソッドを呼び出すに進みます。この場合、オブジェクト指向プログラミングを使用することは私にとっては間違っているようです。

私の目的は、各メソッドの入力が前のメソッドの出力に依存しないようにスクリプトを書き直して、特定のメソッドを実行するかどうかを判断できるようにすることです。

この目的のためにどのようなデザインパターンを使用する必要がありますか?これは機能プログラミングに向けてますます進んでいますか?

答えて

1
class Algorithm: 
    @staticmethod 
    def perform_transformation_a(data): 
     return 350 * data 

    @staticmethod 
    def perform_transformation_b(data): 
     return 400 * data 


def perform_transformations(data): 
    transformations = (Algorithm.perform_transformation_a, 
         Algorithm.perform_transformation_b) 

    for transformation in transformations: 
     data = transformation(data) 
    return data 

Algorithmクラスを純粋な関数のコレクションにすることができます。そして、クライアントコード(ここではperform_transformations)をどの変換を適用するかを注文するロジックにしてください。このようにして、Algorithmクラスは、関数の順序付けに関するアルゴリズムとクライアントの心配だけに責任があります。

0

1つのオプションは、このようなあなたのメソッドを定義することです:

def perform_transformation(self, data=None): 
    if data is None: 
     perform action on self.data 
    else: 
     perform action on data 

この方法で、あなたが望む任意の時点でそれらを呼び出すする能力を持っています。

+0

具体的には、私は全体的なコードをどのように構造化するかについて、より高いレベルのガイダンスを探しています – ugotchi

関連する問題