यह वास्तव में व्यक्तिगत प्राथमिकता है, और आपके पायथन मॉड्यूल के लेआउट के साथ करना है।
मान लें कि आपके पास erikutils
नामक एक मॉड्यूल है। दो तरीके है कि यह एक मॉड्यूल हो सकता है, या तो आप एक फ़ाइल अपने sys.path
पर erikutils.py कहा जाता है या आप एक निर्देशिका कहा जाता है इसके अंदर एक खाली __init__.py
फ़ाइल के साथ अपने sys.path
पर erikutils है। तो मान लें कि आपके पास 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 * फ़ील्ड क्लासेस __init__.py
फ़ाइल django/db/मॉडल/फ़ील्ड निर्देशिका में परिभाषित हैं। मुझे लगता है कि उन्होंने ऐसा इसलिए किया क्योंकि वे सब कुछ एक hypothetical django/db/models/field.py मॉडल में क्रैम नहीं करना चाहते थे, इसलिए उन्होंने इसे कुछ सबोडोड्यूल में विभाजित किया (संबंधित.py, files.py, उदाहरण के लिए) और उन्होंने फ़ील्ड मॉड्यूल में बनाई गई * फ़ील्ड परिभाषाओं को फंस गया (इसलिए, __init__.py
)।
यह वास्तव में Django के बारे में नहीं है? हां, आपने इसे पहले Django में देखा, लेकिन यह एक शुद्ध पायथन चीज़ की तरह लगता है - शायद Django टैग वास्तव में उपयुक्त नहीं है। –
मुझे '__init __। Py' django 1.8 में कोई आयात विवरण नहीं दिखाई देता है। क्या यह एक पुराने संस्करण के लिए था? यदि ऐसा है तो कौन सा संस्करण? –