2011-01-13 3 views
3

Also ich bin gerade dabei, mit Python, und derzeit arbeite ich mich durch http://diveintopython3.ep.io/. Die Codebeispiele sind nett, aber die überwiegende Mehrheit von ihnen sind kleine Vier-Zeilen-Schnipsel, und ich möchte ein wenig mehr von dem großen Bild sehen.Datei/Modul-Struktur in Python

Wie ich es verstehe - und korrigiere mich, wenn ich falsch liege - wird jede '.py' Datei zu einem "Modul", und eine Gruppe von Modulen in einem Verzeichnis wird ein "Paket" (zumindest, es tut, wenn ich eine __init__.py Datei in diesem Verzeichnis erstelle). Was ist, wenn ich keine __init__.py Datei habe?

Wie also sieht jede "Modul" -Datei aus? Definiere ich generell nur eine Klasse in der Datei? Geht irgendetwas anderes in diese Datei neben der Klassendefinition und vielleicht einer Handvoll von import Befehlen?

+1

Python ist nicht Java :) – mouad

Antwort

5

Was ist, wenn ich keine __init__.py Datei habe?

Es ist nur ein Ordner.

Definiere ich generell nur eine Klasse in der Datei?

Kommt drauf an. Nicht unbedingt.

Hat irgendetwas anderes in dieser Datei geht neben der Klassendefinition und vielleicht eine Handvoll Importbefehle?

Sie können alles setzen, was Sie wollen. Alles, was mindestens Python gültig ist.

+0

+1, aber ich werde entferne das __es hängt ab__ da :) – mouad

+0

Warum? Sie denken, dass es unvorstellbar ist, ein Modul zu haben, das nur eine einzige Klasse ist? – Falmarri

+0

Ich habe ziemlich viele Module, die überhaupt keine Klassen definieren. Ich habe andere, die einige verwandte Klassen definieren (und immer noch nicht 100, 150 Zeilen überschreiten). Python ist nicht Java - Klassen sind nicht obligatorisch, Sie verwenden sie also nicht, wenn es bessere Möglichkeiten gibt (natürlich gilt das auch für alles andere). – delnan

0

Falmarri antwortet es ziemlich gut, aber nur hinzufügen:

__init__.py kann eine leere Datei (und in der Regel ist), aber es kann auch Initialisierungscode für das Paket oder stellen Sie die __all__ Variable auszuführen.

+0

Oder Sie können Ihren gesamten Code in "__init__" setzen. Oder fügen Sie den Code ein, den Sie bereitstellen möchten. – Falmarri

+1

Ich habe auch gesehen (und ich mag es, als Bibliotheksbenutzer) 'von pkgpkg importieren einige, häufig verwendete, Zeug 'so gibt' Import pkg' bereits die meisten Dinge, die Sie brauchen. – delnan

1

nicht wirklich eine Antwort, aber es lohnt sich immer in der Standard-Bibliothek suchen, um zu sehen, wie sie __init__.py in Paketen wie sqlite3 verwenden vs. Module wie SimpleHTTPServer