È solo una preferenza personale e ha a che fare con il layout dei tuoi moduli Python.
Supponiamo che tu abbia un modulo chiamato erikutils
. Ci sono due modi in cui può essere un modulo, o hai un file chiamato erikutils.py sul tuo sys.path
o hai una directory chiamata erikutils sul tuo sys.path
con un __init__.py
file vuoto al suo interno. Quindi diciamo che si dispone di un gruppo di moduli chiamati fileutils
, procutils
, parseutils
e si desidera quelle da sottomoduli sotto erikutils
. Quindi crei alcuni file .py chiamati fileutils.py , procutils.py e parseutils.py :
erikutils
__init__.py
fileutils.py
procutils.py
parseutils.py
Forse avete un paio di funzioni che semplicemente non appartengono nei fileutils
, procutils
o parseutils
moduli. E diciamo che non hai voglia di creare un nuovo modulo chiamato miscutils
. E, vorresti poter chiamare la funzione in questo modo:
erikutils.foo()
erikutils.bar()
piuttosto che fare
erikutils.miscutils.foo()
erikutils.miscutils.bar()
Quindi, poiché il erikutils
modulo è una directory, non un file, dobbiamo definire le sue funzioni all'interno del __init__.py
file.
In Django, il miglior esempio a cui riesco a pensare è django.db.models.fields
. TUTTE le classi django * Field sono definite nel __init__.py
file nella directory django / db / models / fields . Immagino che lo abbiano fatto perché non volevano stipare tutto in un ipotetico modello django / db / models / fields.py , quindi lo hanno diviso in alcuni sottomoduli ( related.py , files.py , per esempio) e hanno bloccato le definizioni * Field fatte nel modulo dei campi stesso (quindi, __init__.py
).