Ce n'est qu'une préférence personnelle, qui dépend de la disposition de vos modules python.
Disons que vous avez un module appelé erikutils
. Il y a deux façons d'être un module, soit vous avez un fichier appelé erikutils.py sur votre sys.path
ou vous avez un répertoire appelé erikutils sur votre sys.path
avec un vide __init__.py
en son sein. Ensuite, disons que vous avez un groupe de modules appelés fileutils
, procutils
, parseutils
et vous voulez que ceux-ci soient des sous-modules sous erikutils
. Vous créez donc des fichiers .py appelés fileutils.py , procutils.py y parseutils.py :
erikutils
__init__.py
fileutils.py
procutils.py
parseutils.py
Peut-être que vous avez quelques fonctions qui n'ont pas leur place dans le système de gestion de l'information. fileutils
, procutils
ou parseutils
modules. Et disons que vous n'avez pas envie de créer un nouveau module appelé miscutils
. ET, vous aimeriez pouvoir appeler la fonction comme ceci :
erikutils.foo()
erikutils.bar()
plutôt que de faire
erikutils.miscutils.foo()
erikutils.miscutils.bar()
Ainsi, parce que le erikutils
est un répertoire, et non un fichier, nous devons définir ses fonctions à l'intérieur du module __init__.py
fichier.
Dans django, le meilleur exemple auquel je pense est le suivant django.db.models.fields
. TOUTES les classes de champs *de django sont définies dans le fichier __init__.py
dans le fichier django/db/models/fields répertoire. Je suppose qu'ils ont fait ça parce qu'ils ne voulaient pas tout mettre dans un hypothétique django/db/models/fields.py Ils l'ont donc divisé en plusieurs sous-modules ( related.py , files.py par exemple) et ils ont collé les définitions de *champs faites dans le module des champs lui-même (d'où, __init__.py
).