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.patho tiene un directorio llamado erikutils en su sys.pathcon un __init__.pyarchivo vacío dentro. Entonces digamos que usted tiene un montón de módulos llamados fileutils, procutils, parseutilsy 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, procutilso parseutilsmó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 erikutilsmódulo es un directorio, no un archivo, tenemos que definir sus funciones dentro del __init__.pyarchivo.
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__.pyarchivo 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).