यह वास्तव में सिर्फ व्यक्तिगत पसंद है, और अपने अजगर मॉड्यूल के लेआउट के साथ करना है।
मान लीजिए कि आपके पास एक मॉड्यूल है जिसे कहा जाता है 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