2017-05-15 8 views
0

Ich betrachte drei Möglichkeiten zur Implementierung der Helferfunktion, d. H. Eine Funktion, die nur von einer bestimmten Methode innerhalb einer Klasse aufgerufen wird. Die Optionen sind:Hilfefunktion innerhalb der Klasse - Vor- und Nachteile für verschiedene Ansätze

  1. definieren eine externe Funktion
  2. Definieren Sie eine Funktion der Klasse
  3. Definieren Sie eine Funktion in der Aufruffunktion ist

Hier ein minimaler Code die drei Optionen zeigt:

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 

Ich habe Leistungen getestet und alle drei scheint in etwa gleich zu sein. Meine Frage: Können Sie mir einige Überlegungen mitteilen, die ich bei der Wahl zwischen den drei Optionen beachten sollte?

Ich werde schätzen, architektonische Einblicke und Anleitung zu bekommen, wenn Sie denken, dass jeder verwendet werden sollte.

Antwort

1

Aus objektorientierter Sicht ist es besser, wenn der Aufrufer Methodenaufrufe kombiniert, um seine Ergebnisse zu erzielen, und nicht die aufgerufene Klasse. Dies schafft mehr Flexibilität im Code für den Anrufer, was in einer Welt mit sich ständig ändernden Anforderungen im Allgemeinen eine gute Sache ist.

Das gesagt in Bezug auf die in der Klasse definierte Hilfsfunktion ist die Frage, ist die Hilfsfunktion intrinsisch oder wesentlich für das Funktionieren der Methode genannt. Mit anderen Worten, macht es Sinn, die Funktionalität aufzuteilen und zwei nützliche Funktionen zu erstellen, oder haben Sie wirklich nur eine nützliche Funktion?

In Bezug auf die Definition der Hilfsfunktion als externe Funktion sollten verwandte Funktionen in einer Klasse zusammengefasst werden, um die Codepflege zu erleichtern. Beachten Sie, dass jede Klasse der Single Responsibility Principle folgen und einen und nur einen Grund haben sollte, sich zu ändern.

0

Es wird einfacher zu testen, wenn Sie nur eine einfache Funktion außerhalb der Klasse verwenden.

Verwandte Themen