En realidad, es solo una preferencia personal y tiene que ver con el diseño de sus módulos de Python.
Digamos que tiene un módulo llamado erikutils
. Hay dos formas en que puede ser un módulo, o tiene un archivo llamado erikutils.py en su sys.path
o tiene un directorio llamado erikutils en su sys.path
con un __init__.py
archivo vacío dentro. Entonces digamos que usted tiene un montón de módulos llamados fileutils
, procutils
, parseutils
y que desea que estén bajo submóduloserikutils
. Entonces crea algunos archivos .py llamados fileutils.py , procutils.py y parseutils.py :
erikutils
__init__.py
fileutils.py
procutils.py
parseutils.py
Tal vez usted tiene algunas funciones que simplemente no tienen cabida en los fileutils
, procutils
o parseutils
módulos. Y digamos que no tiene ganas de crear un nuevo módulo llamado miscutils
. Y, le gustaría poder llamar a la función así:
erikutils.foo()
erikutils.bar()
en lugar de hacer
erikutils.miscutils.foo()
erikutils.miscutils.bar()
Entonces, debido a que el erikutils
módulo es un directorio, no un archivo, tenemos que definir sus funciones dentro del __init__.py
archivo.
En django, el mejor ejemplo en el que puedo pensar es django.db.models.fields
. TODAS las clases de django * Field se definen en el __init__.py
archivo en el directorio django / db / models / fields . Supongo que hicieron esto porque no querían meter todo en un modelo hipotético de django / db / models / fields.py , por lo que lo dividieron en algunos submódulos ( related.py , files.py , por ejemplo) y pegaron las definiciones de * Field hechas en el módulo de campos en sí (por lo tanto, __init__.py
).