Es ist nur persönliche Präferenz wirklich, und hat mit dem Layout Ihrer Python-Modulen zu tun.
Angenommen, Sie haben ein Modul erikutils
genannt haben. Es gibt zwei Möglichkeiten, dass es ein Modul sein kann, haben Sie entweder eine Datei erikutils.py auf Ihrem sys.path
genannt, oder Sie haben ein Verzeichnis erikutils auf sys.path
mit einer leeren __init__.py
Datei in es nennt. Dann lassen Sie uns sagen, dass Sie eine Reihe von Modulen namens fileutils
, procutils
, parseutils
und Sie wollen, dass die Submodule unter erikutils
sein. So machen Sie einige Py Dateien namens fileutils.py, procutils.py und parseutils.py:
erikutils
__init__.py
fileutils.py
procutils.py
parseutils.py
Vielleicht haben Sie einige Funktionen, die nur gehören nicht in den fileutils
, procutils
oder parseutils
Module.Nehmen wir an, Sie möchten kein neues Modul namens miscutils
erstellen. AND, Sie möchten in der Lage sein, um die Funktion aufzurufen, wie so:
erikutils.foo()
erikutils.bar()
anstatt tun
erikutils.miscutils.foo()
erikutils.miscutils.bar()
So, da das erikutils
Modul ist ein Verzeichnis, keine Datei, müssen wir definieren es funktioniert innerhalb der __init__.py
Datei.
In Django, das beste Beispiel, das ich denken kann, ist django.db.models.fields
. Alle django * -Feldklassen sind in der __init__.py
Datei im Verzeichnis django/db/models/fields definiert. Ich nehme an, sie taten das, weil sie nicht alles in ein hypothetisches Modell stopfen wollten, also verteilten sie es in ein paar Submodule (verwandte.py, files.py, zum Beispiel) und sie stecken die gemachten * Felddefinitionen in die Felder Modul selbst (daher __init__.py
).
Dies ist nicht wirklich über Django ist es? Ja, du hast es zuerst in Django gesehen, aber das scheint eher eine reine Python-Sache zu sein - vielleicht ist das Django-Tag nicht wirklich passend. –
Ich sehe keine Importanweisungen in '__init __. Py' django 1.8. War das für eine ältere Version? wenn ja welche Version? –