2015-04-26 10 views
6

Ich fange an, eine große Python-Bibliothek für einen Bereich der Mathematik zu schreiben.OOP - Organisation großer Klassen

Also habe ich diese Datenstruktur (definiert in Klasse A), die ein mathematisches Modell darstellt.

Ich habe eine Reihe von kleineren Funktionen, die ich in A gesetzt haben:

Af(), Ag(), ...

Welches sind mehr oder weniger "Hilfsfunktionen", die benötigt werden weitere wichtige Funktionen AX(), AY(), ..., die der Endbenutzer interessiert sich.

Alle diese Funktionen natürlich abhängig von den Daten in A.

Aber die Anzahl der Methoden zur Berechnung in A wächst und wächst und wird verwirrend. Wie spaltet man eine solche Klasse in kleinere Teile? Lets sagen, die Datenstruktur mit grundlegenden Operationen darin und die "Methoden", die Berechnungen auf der Struktur tun?

Was ist der übliche Ansatz und der pythischste Ansatz?

+0

Versuchen Sie, die Datenstruktur in kleinere Objekte aufzuteilen, und die Methoden folgen. – cdarke

+0

Überprüfen Sie auch die Richtlinien in PEP 8 und "importieren". Es sieht so aus, als ob Sie Klassen schreiben, die keine wirklichen Typen sind - tun Sie das nicht. –

+0

Es kann hilfreich sein, wenn Sie ein konkreteres Beispiel haben – daphshez

Antwort

4

Sie können rein funktionale Ansatz- und Verschiebungsmethoden verwenden, die von Klassenbenutzern nicht zur Objektinstanz zum Trennen von Dateien aufgerufen werden sollen.

Im reinen funktionalen Ansatz hängen die Funktionen nicht von einem internen Zustand ab, haben keine Nebenwirkungen und berechnen den Rückgabewert nur basierend auf den angegebenen Argumenten.

Ein Beispiel zur Veranschaulichung würde ersetzt die folgenden:

# shape.py 
class Shape: 

    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

    def area(self): 
     return self.x * self.y 

mit:

# shape.py 
class Shape: 

    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

# func.py 
def area(shape): 
    return shape.x * shape.y 

Natürlich könnte es nicht eine gute Idee, zu extrahieren area Methode der Shape Klasse in eine sein separate Funktion in einer anderen Datei, aber Sie können definitiv alle "Hilfsfunktionen" in separate Dateien verschieben und sie ordnungsgemäß von den Klassenmethoden aufrufen.

Dies wird auch die Funktionsprüfung von Helfern erheblich vereinfachen.

0

Es ist eine Konvention, "private" oder Hilfsmethoden, die nicht Teil der öffentlichen Schnittstelle einer Klasse sind, mit einzelnen oder doppelten Unterstrichen zu versehen. Ein Effekt ist beispielsweise, dass Methoden wie _my_helper nicht angezeigt werden, wenn für die Klasse aufgerufen wird.

Weitere Einzelheiten finden Sie in this post.