Bu gerçekten kişisel bir tercihtir ve python modüllerinizin düzeni ile ilgilidir.
Diyelim ki adlı bir modülünüz var erikutils. Orada bir modül olabilir iki yolu vardır, ya sen adlı bir dosya var erikutils.py sizinle ilgili şu sys.pathveya bir dizin olarak adlandırılan sahip erikutils Aşağıdaki yerlerde de sys.pathboş ile __init__.pyiçindeki dosyada. O zaman aradığınız modüllerin bir grup var diyelim fileutils, procutils, parseutilsve o altındaki alt modüller olmak istiyorum erikutils. Bazı .py adı verilen dosyaları yapmak Yani fileutils.py , procutils.py ve parseutils.py :
erikutils
__init__.py
fileutils.py
procutils.py
parseutils.py
Belki sadece değil aittir yapmak birkaç işlevlere sahip fileutils, procutilsya da parseutilsmodüllerin. Ve diyelim ki adında yeni bir modül oluşturmak istemiyorsunuz miscutils. VE işlevi şu şekilde çağırabilmek istiyorsunuz:
erikutils.foo()
erikutils.bar()
yapmak yerine
erikutils.miscutils.foo()
erikutils.miscutils.bar()
Yani erikutilsmodül bir dosya değil dizin olduğu için, onun işlevlerini __init__.pydosyanın içinde tanımlamamız gerekiyor .
Django'da aklıma gelen en iyi örnek django.db.models.fields. TÜM django * Field sınıfları __init__.py, django / db / models / fields dizinindeki dosyada tanımlanır . Sanırım bunu yaptılar çünkü her şeyi farazi bir django / db / models / fields.py modeline sığdırmak istemediler , bu yüzden onu birkaç alt modüle ( örneğin related.py , files.py ) ayırdılar ve yapılan * Alan tanımlarını alanlar modülünün kendisine yapıştırdılar (dolayısıyla, __init__.py).