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.path
veya bir dizin olarak adlandırılan sahip erikutils Aşağıdaki yerlerde de sys.path
boş ile __init__.py
içindeki dosyada. O zaman aradığınız modüllerin bir grup var diyelim fileutils
, procutils
, parseutils
ve 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
, procutils
ya da parseutils
modü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 erikutils
modül bir dosya değil dizin olduğu için, onun işlevlerini __init__.py
dosyanı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
).