Es ist wirklich nur eine persönliche Präferenz und hat mit dem Layout Ihrer Python-Module zu tun.
Angenommen, Sie haben ein Modul namens erikutils
. Es gibt zwei Möglichkeiten, wie es ein Modul sein kann: Entweder haben Sie eine Datei namens erikutils.py auf Ihrem sys.path
oder Sie haben ein Verzeichnis namens erikutils auf Ihrem, sys.path
in dem sich eine leere __init__.py
Datei befindet. Dann lassen Sie uns sagen , dass Sie eine Reihe von Modulen haben genannt fileutils
, procutils
, parseutils
und Sie möchten die unter Submodule sein erikutils
. Sie erstellen also einige .py-Dateien mit den Namen fileutils.py , procutils.py und parseutils.py :
erikutils
__init__.py
fileutils.py
procutils.py
parseutils.py
Vielleicht haben Sie ein paar Funktionen , die einfach nicht , gehören in den fileutils
, procutils
oder parseutils
Module. Angenommen, Sie möchten kein neues Modul namens erstellen miscutils
. UND, Sie möchten die Funktion folgendermaßen aufrufen können:
erikutils.foo()
erikutils.bar()
anstatt zu tun
erikutils.miscutils.foo()
erikutils.miscutils.bar()
Da das erikutils
Modul also ein Verzeichnis und keine Datei ist, müssen wir seine Funktionen innerhalb von definieren__init__.py
Datei definieren.
In django, ist das beste Beispiel , das ich denken kann django.db.models.fields
. ALLE django * -Feldklassen werden in der __init__.py
Datei im Verzeichnis django / db / models / fields definiert . Ich denke, sie haben dies getan, weil sie nicht alles in ein hypothetisches django / db / models / fields.py- Modell packen wollten , also haben sie es in einige Submodule aufgeteilt ( related.py , files.py zum Beispiel) und Sie haben die gemachten * Felddefinitionen in das Feldmodul selbst gesteckt (daher __init__.py
).