Frage

Ich bin an das Java-Modell gewöhnt, bei dem Sie eine öffentliche Klasse pro Datei haben können.In Python gibt es diese Einschränkung nicht, und ich frage mich, was die beste Vorgehensweise für die Organisation von Klassen ist.

War es hilfreich?

Lösung

Eine Python-Datei ist ein „Modul“ genannt, und es ist eine Möglichkeit, die Software so zu organisieren, dass es „Sinn“ macht. Ein weiterer Grund ist ein Verzeichnis, ein „Paket“ genannt.

Ein Modul ist eine eindeutige Sache, die ein oder zwei Dutzend haben eng verwandte Klassen. Der Trick besteht darin, dass ein Modul ist etwas, das Sie importieren, und Sie müssen diese importieren, um Menschen zu sein, durchaus sinnvoll, wer lesen, pflegen und Ihre Software erweitern.

Die Regel ist dies: ein Modul ist die Einheit der Wiederverwendung .

Sie können nicht einfach eine einzige Klasse wiederverwenden. Sie sollten ein Modul ohne Schwierigkeiten wiederverwenden können. Alles, was in Ihrer Bibliothek (und alles, was Sie herunterladen und hinzufügen) entweder ein Modul oder ein Paket von Modulen.

Zum Beispiel, Sie arbeiten auf etwas, das Tabellen liest, führt einige Berechnungen und lädt die Ergebnisse in eine Datenbank. Was wollen Sie Ihr Hauptprogramm aussehen?

from ssReader import Reader
from theCalcs import ACalc, AnotherCalc
from theDB import Loader

def main( sourceFileName ):
    rdr= Reader( sourceFileName )
    c1= ACalc( options )
    c2= AnotherCalc( options )
    ldr= Loader( parameters )
    for myObj in rdr.readAll():
        c1.thisOp( myObj )
        c2.thatOp( myObj )
        ldr.laod( myObj )

Denken Sie an den Import als die Art und Weise Ihren Code in Konzepte oder Stücke zu organisieren. Genau wie viele Klassen sind in jedem Import keine Rolle spielt. Was zählt, ist die Gesamtorganisation, die Sie mit Ihrem import Aussagen sind porträtiert.

Andere Tipps

Da es keine künstliche Grenze, es hängt wirklich davon ab, was verständlich ist. Wenn Sie ein paar ziemlich kurze, einfache Klassen, die logisch zusammen gruppiert sind, werfen in einem Bündel von ‚em. Wenn Sie große, komplexe Klassen oder Klassen, die keinen Sinn als Gruppe machen, gehen Sie eine Datei pro Klasse. Oder wählen Sie etwas dazwischen. Umgestalten wie die Dinge ändern.

ich zufällig das Java-Modell aus dem folgenden Grund mögen. jede Klasse in einer einzelnen Datei platzieren fördert die Wiederverwendung von Klassen besser erkennbar, wenn Sie den Quellcode durchsuchen. Wenn Sie eine Reihe von Klassen in einer einzigen Datei zusammengefasst haben, kann es nicht an andere Entwickler offensichtlich sein, dass es dort Klassen, die einfach das Projekt wiederverwendet werden kann durch Durchsuchen Verzeichnisstruktur . Somit kann, wenn Sie denken, dass Ihre Klasse möglicherweise wiederverwendet wird, würde ich es in einer eigenen Datei setzen.

Es hängt ganz davon ab, wie groß das Projekt ist, wie lange die Klassen sind, wenn sie von anderen Dateien verwendet werden und so weiter.

Zum Beispiel verwende ich oft eine Reihe von Klassen für Daten-Abstraktion - so darf ich 4 oder 5 Klassen, die nur 1 Zeile lang (class SomeData: pass) sein können

.

Es wäre dumm, jede davon in separate Dateien aufteilen - aber da sie aus verschiedenen Dateien verwendet werden können, alle diese in einer separaten Datei data_model.py setzen würde Sinn machen, so kann ich from mypackage.data_model import SomeData, SomeSubData tun

Wenn Sie eine Klasse mit viel Code darin haben, vielleicht mit einigen Funktionen nur verwendet es, wäre es eine gute Idee, diese Klasse und die Helfer-Funktionen in eine separate Datei zu teilen.

Sie sollten sie strukturieren, so dass Sie from mypackage.database.schema import MyModel, nicht from mypackage.email.errors import MyDatabaseModel - wenn, wo man Dinge aus Sinn importieren, und die Dateien sind nicht Zehntausende von Zeilen lang, können Sie es richtig organisiert

.

Die Python-Module Dokumentation einige nützliche Informationen hat auf die Organisation Pakete.

Ich ertappe dabei, dass ich Dinge aufteile, wenn ich mich über die Größe der Dateien ärgere und die gewünschte Struktur der Zusammenhänge auf natürliche Weise entsteht.Oft scheinen diese beiden Phasen zusammenzufallen.

Es kann sehr ärgerlich sein, wenn Sie die Dinge zu früh aufteilen, weil Ihnen dann klar wird, dass eine völlig andere Reihenfolge der Struktur erforderlich ist.

Wenn andererseits eine .java- oder .py-Datei mehr als 700 Zeilen umfasst, ärgere ich mich ständig über den Versuch, mich daran zu erinnern, wo „dieses bestimmte Bit“ ist.

Bei Python/Jython scheint auch die zirkuläre Abhängigkeit von Importanweisungen eine Rolle zu spielen:Wenn Sie versuchen, zu viele zusammenwirkende Grundbausteine ​​in separate Dateien aufzuteilen, scheint Sie diese „Einschränkung“/„Unvollkommenheit“ der Sprache dazu zu zwingen, Dinge zu gruppieren, vielleicht auf eine recht sinnvolle Weise.

Was die Aufteilung in Pakete angeht, weiß ich nicht wirklich, aber ich würde sagen, dass wahrscheinlich die gleiche Regel des Ärgers und der Entstehung einer glücklichen Struktur auf allen Ebenen der Modularität funktioniert.

würde ich sagen, zu viele Klassen setzen wie logisch in dieser Datei gruppiert werden, ohne dass es zu groß und komplex zu machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top