Hallo zusammen
Wie ist das eigentlich? Es scheint mir, als ob es in Python alles andere als ungewöhnlich ist, Klassendefinitionen und Funktionen zusammen ins gleiche Modul zu schreiben. Gibt es keine Gründe, die dafür sprechen würden, mindestens für jede Klasse ein eigenes Modul zu haben?
Ich habe bis jetzt nur mit Java gearbeitet und dort wird ja eher ein solcher Approach verfolgt. Es ist mir einfach noch ein bisschen unklar, welche Denkweise hier zum Zug kommt.
Besten Dank für Hinweise.
Python best practice
[url=http://www.proandkon.com]proandkon.com[/url]
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Welche Gründe würdest du denn da sehen? Ich sehe einige die dagegensprechen.mzh hat geschrieben:Es scheint mir, als ob es in Python alles andere als ungewöhnlich ist, Klassendefinitionen und Funktionen zusammen ins gleiche Modul zu schreiben. Gibt es keine Gründe, die dafür sprechen würden, mindestens für jede Klasse ein eigenes Modul zu haben?
Die "Wir stecken alles in Klassen auch wenn es nur Funktionen sind"-Denkweise. Ich denke damit wollten die Sprachdesigner klarstellen dass Java OOP ist, aber persönlich halte ich den Ansatz für störend und ungelungen.mzh hat geschrieben:Ich habe bis jetzt nur mit Java gearbeitet und dort wird ja eher ein solcher Approach verfolgt. Es ist mir einfach noch ein bisschen unklar, welche Denkweise hier zum Zug kommt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Nein, ich meine nicht, welche Denkweise bei Java angewendet wird, sondern eben hier in Python.
Für mich sieht es noch ungewöhnlich aus, wenn ich in einem Modul eine Funktion und eine Klasse auf der gleichen "Hierarchiestufe" stehen sehe, weil für mich stellen Klassen etwas dar, was den Funktionen übergeordnet sind (nach dem Motto: "Klassen können Funktionen haben, aber Funktionen können keine Klassen haben.")
PS: Mit "Hierarchie" oben soll indentation gemeint sein.
Für mich sieht es noch ungewöhnlich aus, wenn ich in einem Modul eine Funktion und eine Klasse auf der gleichen "Hierarchiestufe" stehen sehe, weil für mich stellen Klassen etwas dar, was den Funktionen übergeordnet sind (nach dem Motto: "Klassen können Funktionen haben, aber Funktionen können keine Klassen haben.")
PS: Mit "Hierarchie" oben soll indentation gemeint sein.
[url=http://www.proandkon.com]proandkon.com[/url]
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo mzh!mzh hat geschrieben:Gibt es keine Gründe, die dafür sprechen würden, mindestens für jede Klasse ein eigenes Modul zu haben?
Gegenfrage: Warum soll man ein kleines Programm in mehrere Dateien aufteilen, wenn es keinen Grund dafür gibt? Und die Aussage "Jede Klasse gehört in eine eigene Datei." ist sicher kein Grund dafür.
Wenn das Programm wächst, dann kann man Teile des Programmes in Module auslagern. Die Klassen "Addresses" und "Address" würde ich z.B. gemeinsam in ein Modul packen. Auch die Funktionen "format_address" oder "get_countries_list" würden in das "adresses"-Modul passen. Der Hintergrund ist der, dass man nicht die Klassen importiert, sondern einen Kontainer (Modul, Paket) mit thematisch zusammengehörenden Funktionen, Konstanten und Klassen.
Die Denkweise ist dann die: Wenn ich Zugriff auf Adressen brauche, dann importiere ich mir das Modul/Paket "addresses". Alles was ich brauche ist dann dort vereint.
Es bleibt dir aber überlassen, wenn du dich damit wohler fühlst, die Klassen weiterhin in einzelne Module zu schreiben. Fasse sie aber zumindest in Pakete zusammen.
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Das scheint dir richtig. Abgesehen von den Antworten in diesem Thread findest du im Forum schon einige weitere Threads zum Thema aus der letzten Zeit.mzh hat geschrieben:Wie ist das eigentlich? Es scheint mir, als ob es in Python alles andere als ungewöhnlich ist, Klassendefinitionen und Funktionen zusammen ins gleiche Modul zu schreiben.
Wer ausreichend gründlich mit Java geimpft wurde, der tut sich gelegentlich schwer damit, die neue Freiheit von Python auch zu nutzen. Es ist gerade eine der Stärken von Python, dass man nicht auf OOP festgelegt ist, sondern auch mal rein imperativ/prozedural programmieren kann, was ja insbesondere bei kleinen Skripten sinnvoll ist. Oder man kombiniert beides - warum auch nicht. So lange der gesamte Code eine übersichtliche Struktur behält, spricht doch nichts dagegen.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das wäre die "wir stecken zusammengehörige Sachen in ein Modul"-Denkweise.mzh hat geschrieben:Nein, ich meine nicht, welche Denkweise bei Java angewendet wird, sondern eben hier in Python.
Das Motto stimmt aber gar nicht. Ich kann gut und gerne auch Klassen innerhalb von Funktionen definieren und mit ihnen ganz normal arbeiten.mzh hat geschrieben:(nach dem Motto: "Klassen können Funktionen haben, aber Funktionen können keine Klassen haben."
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- Goswin
- User
- Beiträge: 366
- Registriert: Freitag 8. Dezember 2006, 11:47
- Wohnort: Ulm-Böfingen
- Kontaktdaten:
Ich beobachte, dass innerhalb von Python-Funktionen durchaus Klassen definiert werden, sehe also nicht klar, was nun übergeordnet und was untergeordnet ist. (Ich selber habe bisher nur Funktionen innerhalb von Klassen benutzt, aber ich bin ja erst neu in Python)mzh hat geschrieben:Für mich stellen Klassen etwas dar, was den Funktionen übergeordnet sind (nach dem Motto: "Klassen können Funktionen haben, aber Funktionen können keine Klassen haben.")
Gruppiere nach logischen Zusammenhängen zwischen Objekten, vielleicht ein bisschen so, wie Java die Pakete organisiert. Am Beispiel "java.io.*" wäre "io.py" ein Modul mit allerhand IO-Klassen und Funktionen, und "java" ein Paket, dass alle Module einer bestimmten Bibliothek gruppiert.mzh hat geschrieben:Nein, ich meine nicht, welche Denkweise bei Java angewendet wird, sondern eben hier in Python.
Funktionen sind wie Klassen nur Objekte, und Klassen sind auch nicht irgendwie toller, schöner, besser oder cooler als Funktionen, sondern nur ein anderer Ansatz, der manchmal sinnvoll ist, manchmal aber eben auch nicht, vor allem nicht immer.Für mich sieht es noch ungewöhnlich aus, wenn ich in einem Modul eine Funktion und eine Klasse auf der gleichen "Hierarchiestufe" stehen sehe, weil für mich stellen Klassen etwas dar, was den Funktionen übergeordnet sind (nach dem Motto: "Klassen können Funktionen haben, aber Funktionen können keine Klassen haben.")
lunar's `io`-Beispiel in Python 3.0:
Code: Alles auswählen
bj@s8n:~$ python3.0
Python 3.0 (r30:67503, Dec 5 2008, 17:49:28)
[GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import io
>>> from pprint import pprint
>>> pprint(dir(io))
['BlockingIOError',
'BufferedIOBase',
'BufferedRWPair',
'BufferedRandom',
'BufferedReader',
'BufferedWriter',
'BytesIO',
'DEFAULT_BUFFER_SIZE',
'FileIO',
'IOBase',
'IncrementalNewlineDecoder',
'Lock',
'OpenWrapper',
'RawIOBase',
'StringIO',
'TextIOBase',
'TextIOWrapper',
'UnsupportedOperation',
'_BufferedIOMixin',
'_BytesIO',
'_DocDescriptor',
'_StringIO',
'__all__',
'__author__',
'__builtins__',
'__doc__',
'__file__',
'__name__',
'__package__',
'_bytesio',
'_fileio',
'_stringio',
'abc',
'codecs',
'open',
'os']
- DatenMetzgerX
- User
- Beiträge: 398
- Registriert: Freitag 28. April 2006, 06:28
- Wohnort: Zürich Seebach (CH)
[quote="mzh"
Für mich sieht es noch ungewöhnlich aus, wenn ich in einem Modul eine Funktion und eine Klasse auf der gleichen "Hierarchiestufe" stehen sehe, weil für mich stellen Klassen etwas dar, was den Funktionen übergeordnet sind (nach dem Motto: "Klassen können Funktionen haben, aber Funktionen können keine Klassen haben.")
PS: Mit "Hierarchie" oben soll indentation gemeint sein.[/quote]
Naja, Java hat ja auch anonyme Klassen, dann sind die Methoden den Klassen übergeordnet
Für mich sieht es noch ungewöhnlich aus, wenn ich in einem Modul eine Funktion und eine Klasse auf der gleichen "Hierarchiestufe" stehen sehe, weil für mich stellen Klassen etwas dar, was den Funktionen übergeordnet sind (nach dem Motto: "Klassen können Funktionen haben, aber Funktionen können keine Klassen haben.")
PS: Mit "Hierarchie" oben soll indentation gemeint sein.[/quote]
Naja, Java hat ja auch anonyme Klassen, dann sind die Methoden den Klassen übergeordnet
