Python Programmierstil

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sprudel
User
Beiträge: 250
Registriert: Donnerstag 8. März 2007, 17:12

Hallo, ich hätte mal eine Frage:

Bei Java packt man ja zum Beispiel jede Klasse in eine Datei. Wie ist es eigetnlich bei Python gängig? Ist es normal, dass man alle zu einem Projekt gehörigen Klassen (also zum Beispiel für ein kleines Warenwirtschaftssystem alle Klassen wie Product, Client,...) in eine Datei packt?
So wurde es mir irgendwann mal gesagt, aber ich frage mich, ob das wirklich gängig ist. Die Datei wird ja schließlich relativ groß.

Vielen Dank.
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@sprudel: In Python ist es nicht üblich, für jede Klasse extra eine einzelne Datei zu erzeugen. Es ist nicht mal üblich, für alles unbedingt eine Klasse zu erstellen. Wenn man mehrere Module hat (was bei kleineren Projekten nicht mal nötig sein muss), dann beinhalten diese üblicherweise verschiedene themengleiche Klassen und/oder Funktionen. Die Module zusammen bilden dann ein Package.

EDIT: Bezogen auf dein Beispiel: Falls du nur eine Art von `Product()`- bzw. `Client()`-Klasse hast, dann gehören die gemeinsam in ein Modul. Falls es aber fünf verschiedene Arten von `Client()`s gibt und diese meinetwegen alle von `BaseClient()` erben, dann macht die Implementierung in einem separatem Modul möglicherweise Sinn.

Man sollte es IMHO halt vermeiden, etliche Module mit nur 10-15 Zeilen Code zu haben. Zudem sollte man es generell vermeiden, eine große Struktur vorzuplanen und dann (zumindest am Anfang) kaum was in ihre Komponenten rein zu packen. Aber das ist möglicherweise auch eine Frage des Geschmacks.
Zuletzt geändert von snafu am Donnerstag 14. Juli 2011, 19:23, insgesamt 2-mal geändert.
sprudel
User
Beiträge: 250
Registriert: Donnerstag 8. März 2007, 17:12

Vielen Dank für die Antwort..

in welchen Fällen werden dann überhaupt noch mehrere Dateien verwendet?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Das ist letztlich eine Frage des persönlichen Stils. Vor einiger Zeit gab es AFAIR einen Thread dazu mit dem Ergebnis, dass auch die Erfahrenen in diesem Forum hier unterschiedliche Stile pflegen.
Eine Klasse pro Datei ist in jedem Fall unüblich; ob du alle Klassen in eine Datei packst, hängt vom Umfang ab.
Wenn du das subjektive Empfinden hast, dass eine Datei einfach zu unübersichtlich wird, dann packst du einen Teil der Klassen in ein Modul.
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

numerix hat geschrieben:Wenn du das subjektive Empfinden hast, dass eine Datei einfach zu unübersichtlich wird, dann packst du einen Teil der Klassen in ein Modul.
Entweder das. Oder man nimmt halt ein neues Modul, wenn man weiß, dass man quasi in einem abgeschotteten Bereich eine umfangreichere Funktionalität implementieren möchte, die man der Übersicht halber in einzelne Funktionen unterteilt, von denen man später vielleicht 1-2 höherwertige Funktionen außerhalb des Moduls verwendet. Thematische Zusammenfassung halt. Dabei aber wie gesagt zusehen, dass die Planung dem Inhalt nicht zu weit voraus ist.

Nicht zu vergessen, gibt es dann natürlich noch die typischen `helper`-, `utils`- oder `core`-Module, welche oft Sammlungen von diversen Helferlein beheimaten, die überall mal gebraucht werden. Man kann das so pauschel eh nicht sagen. Jedes Projekt ist anders und jeder Programmierer hat seinen eigenen Stil.
sprudel
User
Beiträge: 250
Registriert: Donnerstag 8. März 2007, 17:12

Ist es denn schlechter Stil, wenn man eine Modulimportierung von der man ausgeht, dass es nicht mehrere parallele Verwendungen geben kann, praktisch wie ein Objekt behandelt? Das heißt, das Modul enthält beispielsweise Variablen für die Datenbank, die dann zum Beispiel mit modul.xyz angesprochen werden.
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Module *sind* Objekte. Und Module sind Namensräume. Du meinst vermutlich, dass du einen Namenraum für diverse Konstanten in Form eines Moduls bereitstellen willst, oder? Also ich sehe da kein Problem drin. Wenn du da noch artig Kommentarzeilen über jede Konstante schreibst, haste sicher eh "genügend" Zeilen für ein Modul verbraucht. ;)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Das Schöne an Python ist ja: Man kann, darf und sollte das machen, was semantisch am sinnvollsten ist. Das steht IMHO im Gegensatz zu anderen Sprachen (z. B. Java - aber gut, da bin ich vielleicht ein wenig voreingenommen - andererseits fragst Du schließlich in einem Pythonforum und solltest das auch erwarten ;-) ). Also, wie Du Beispielsweise mit Deinen Kunden umgehst, hängt ein wenig von der Struktur ab, die Du Deinem Programm geben willst.

Letztlich solltest Du in keiner Sprache davor zurückschrecken mal so richtig "refactoring" zu betreiben, also auch größere Teilmengen des Codes neu zu organisieren, ggf. ganz neu zu schreiben, wenn Dein Programm größer geworden ist. So etwas kostet Zeit, rettet aber später die Übersicht - insb. wenn man neu in einer Sprache ist und am Anfang der Code holperig ausschaut.

So, genug kluggeschissen.

Gruß,
Christian
Antworten