เป็นเพียงความชอบส่วนบุคคลจริงๆและเกี่ยวข้องกับรูปแบบของโมดูลหลามของคุณ
erikutilsสมมติว่าคุณมีโมดูลที่เรียกว่า มีสองวิธีที่สามารถเป็นโมดูลได้ไม่ว่าคุณจะมีไฟล์ชื่อerikutils.pyในไดเร็กทอรีของคุณsys.pathหรือคุณมีไดเร็กทอรีชื่อerikutilsในไฟล์ของคุณsys.pathโดยมี__init__.pyไฟล์ว่างอยู่ แล้วสมมติว่าคุณมีพวงของโมดูลที่เรียกว่าfileutils, procutils, และคุณต้องการผู้ที่จะเป็นโมดูลย่อยภายใต้parseutils erikutilsคุณจึงสร้างไฟล์. py ชื่อfileutils.py , procutils.pyและparseutils.py :
erikutils
  __init__.py
  fileutils.py
  procutils.py
  parseutils.py
บางทีคุณอาจจะมีฟังก์ชั่นบางอย่างที่เพียงแค่ไม่ได้อยู่ในfileutils, procutilsหรือparseutilsโมดูล miscutilsและขอบอกว่าคุณไม่รู้สึกเหมือนการสร้างโมดูลใหม่ที่เรียกว่า และคุณต้องการเรียกใช้ฟังก์ชันดังนี้:
erikutils.foo()
erikutils.bar()
แทนที่จะทำ
erikutils.miscutils.foo()
erikutils.miscutils.bar()
ดังนั้นเนื่องจากerikutilsโมดูลเป็นไดเร็กทอรีไม่ใช่ไฟล์เราจึงต้องกำหนดฟังก์ชันภายในไฟล์__init__.pyไฟล์
ใน Django django.db.models.fieldsตัวอย่างที่ดีที่สุดที่ฉันสามารถคิดคือ ALL Django * การเรียนสนามกำหนดไว้ใน__init__.pyแฟ้มในDjango / DB / รุ่น / เขตไดเรกทอรี ผมคิดว่าพวกเขาทำอย่างนี้เพราะพวกเขาไม่ต้องการที่จะยัดทุกอย่างเป็นสมมุติDjango / DB / รุ่น / fields.pyรูปแบบเพื่อให้พวกเขาแยกมันออกไปไม่กี่ submodules A ( related.py , files.pyตัวอย่างเช่น) และ พวกเขาติดคำนิยามฟิลด์ * ที่สร้างไว้ในโมดูลฟิลด์เอง (ด้วยเหตุนี้__init__.py)