เป็นเพียงความชอบส่วนบุคคลจริงๆและเกี่ยวข้องกับรูปแบบของโมดูลหลามของคุณ
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
)