2017-05-15 7 views
0

ヘルパー関数を実装する3つの方法、つまりクラス内の特定のメソッドによってのみ呼び出される関数を検討しています。オプションは次のとおりです。クラス内のヘルパー関数 - さまざまなアプローチの長所と短所

  1. 外部関数を定義
  2. は、ここで呼び出し元の関数の内部で

を関数を定義したクラス

  • の機能を定義する3つのオプションを示す最小限のコードであります
    class test(object): 
        def mytest1(self, n): 
         return outloop(n) 
    
    
        def mytest2(self, n): 
         return self.inloop(n) 
    
    
        def inloop(self, n): 
         if n < 0: 
          return 0 
         return self.inloop(n - 1) + 1 
    
    
        def mytest3(self, n): 
         def innerloop(n): 
          if n < 0: 
           return 0 
          return innerloop(n - 1) + 1 
         return innerloop(n) 
    
    
    def outloop(n): 
        if n < 0: 
         return 0 
        return outloop(n - 1) + 1 
    

    私はパフォーマンスをテストしており、3つはほぼ同じようです。私の質問:3つの選択肢の中から選択する際に気をつけなければならないいくつかの考慮点を教えてください。

    それぞれを使用する必要があると思われるアーキテクチャの洞察と指針を理解していただきたいと思います。

  • 答えて

    1

    オブジェクト指向設計の観点からは、呼び出し側が呼び出されたクラス自体ではなく、結果を得るためにメソッド呼び出しを結合する方が優れています。これにより、呼び出し元のコードに柔軟性がもたらされます。これは、常に変化する要件の世界では一般的には良いことです。

    これは、クラスで定義されているヘルパー関数の点では、呼び出されるメソッドの機能にとって本質的または本質的なヘルパー関数であると言います。言い換えれば、機能を分割して2つの便利な機能を作成するか、実際には1つの便利な機能しか持たないことは意味がありません。

    ヘルパ関数を外部関数として定義するという点で、関連する関数はクラス内にまとめてコードメンテナンスを容易にする必要があります。どんなクラスもSingle Responsibility Principleに従って、変更する唯一の理由があることに注意してください。

    0

    クラス外のプレーン関数を使用するだけでテストするのは簡単です。

    関連する問題