यह वास्तव में सिर्फ व्यक्तिगत पसंद है, और अपने अजगर मॉड्यूल के लेआउट के साथ करना है।
मान लीजिए कि आपके पास एक मॉड्यूल है जिसे कहा जाता है 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
। सभी django * फ़ील्ड कक्षाओं को django / db / मॉडल / फ़ील्ड निर्देशिका __init__.py
में फ़ाइल में परिभाषित किया गया है । मुझे लगता है कि वे ऐसा किया क्योंकि वे एक काल्पनिक में रटना सब कुछ नहीं करना चाहता था Django / db / मॉडल / fields.py मॉडल है, इसलिए वे इसे कुछ submodules में बाहर विभाजित ( related.py , files.py , उदाहरण के लिए) और उन्होंने फील्ड मॉड्यूल में ही बनी * फील्ड परिभाषाओं को खुद से चिपका दिया (इसलिए, )।__init__.py