Bu sadece kişisel tercih gerçekten, ve python modüllerinizin düzeni ile ilgili.
erikutils
adlı bir modülünüz olduğunu varsayalım. Orada bir modül olabilir iki yolu vardır, ya bir dosya sys.path
üzerinde erikutils.py denilen varsa veya adında bir dizin içindeki boş __init__.py
dosyası ile sizin sys.path
üzerinde erikutils var. O zaman, fileutils
, procutils
, parseutils
adında bir dizi modülünüz olduğunu ve bunların erikutils
altında alt modüller olmasını istediğinizi varsayalım. ,
erikutils
__init__.py
fileutils.py
procutils.py
parseutils.py
Belki
fileutils
ait olmadığını birkaç işlevi vardır: Yani bazı .py
fileutils.py,
procutils.py adı verilen dosyaları ve
parseutils.py yapmak
procutils
veya
parseutils
modülleri.Ve diyelim ki
miscutils
adında yeni bir modül oluşturmak gibi hissetmiyorsunuz. VE, bunu böyle işlevini çağırmak edebilmek istiyorum:
erikutils
modül bir dizin, bir dosya değil, çünkü
erikutils.foo()
erikutils.bar()
ziyade yapıyor
erikutils.miscutils.foo()
erikutils.miscutils.bar()
Demek ki tanımlamak zorunda __init__.py
dosyasındaki işlevlerdir. django olarak
, Aklıma gelen en iyi örnek django.db.models.fields
olduğunu. TÜM Django * Saha sınıfları django/db/modeller/alanlar dizinde __init__.py
dosyasında tanımlanır. Sanırım her şeyi bir varsayımsal django/db/models/fields.py modeline tıkmak istemedikleri için yaptıkları için birkaç alt modüle (related.py, files.py, örneğin) ve (kendisi modülü alanlarda yapılan * Alan tanımları sıkışmış bu nedenle, __init__.py
). __init__.py
dosyasını kullanarak
Bu gerçekten Django ile ilgili değil mi? Evet, önce Django'da gördün, ama bu daha çok Python gibi bir şey gibi görünüyor - belki de Django etiketi gerçekten uygun değil. –
'__init __. Py' django 1.8' da herhangi bir içe aktarma ifadesi göremiyorum. Bu eski bir sürüm için miydi? eğer öyleyse hangi versiyonu? –