2012-07-31 7 views
6

इस प्रकार मैं एक पैकेज संरचना हैअपने पैकेज के __init__.py में घोषित मॉड्यूल एक्सेस गुण क्यों नहीं कर सकते?</p> <pre><code>mypackage __init__.py mymodule.py </code></pre> <p>मैं कुछ "निरंतर" घोषणाओं <code>__init__.py</code> में उदाहरण के लिए डाल दिया:

DELIMITER='\x01' 

, कोड mymodule.py में हालांकि नहीं कर सकते एक्सेस DELIMITER जब तक मैं जोड़ता हूं:

from __init__ import * 

मीटर के शीर्ष पर ymodule.py फ़ाइल। मुझे लगता है कि मैं यहां एक अवधारणा चूक गया। क्या यह है कि __init__.py में जो कुछ भी घोषित किया गया है, उसे तब तक स्मृति में पढ़ा नहीं जाता है जब तक इसे आयात विवरण के माध्यम से एक्सेस नहीं किया जाता है? साथ ही, यह __init__.py फ़ाइल में डालने के लिए एक सामान्य प्रकार की चीज़ है?

+4

आपको यह कहां मिला कि यह 'आयात' कथन के बिना काम करेगा? –

+0

@ डेविड रॉबिन्सन: पायथन दस्तावेज़ से। ["__init__.py ध्वनि पैकेज आरंभ करें"] (http://docs.python.org/tutorial/modules.html#packages)। निश्चित नहीं है कि मैं वहां क्या कह रहा हूं, यह समझने के अलावा, यह मानकर कि __init__.py में कोड पायथन द्वारा प्रारंभ किया गया है। –

उत्तर

5

पायथन पैकेज आयात होने पर __init__.py में कोड चलाएं, जो कुछ प्रारंभिक कार्य करने की अनुमति देता है। हालांकि, सिर्फ इसलिए कि यह चल रहा है इसका मतलब यह नहीं है कि आपके पास अन्य मॉड्यूल के भीतर से चरों तक पहुंच है।

उदाहरण के लिए:

testpackage 
    __init__.py 
    testmod.py 

मान लीजिए कि __init__.py कोड print "Initializing __init__" है, और testmod.pyprint "Initializing testmod" है। उस मामले में, आयात करने testpackage या testmod कारण होगा प्रवर्तन कोड चलाने के लिए:

dynamic-oit-vapornet-c-499:test dgrtwo$ python -c "import testpackage" 
Initializing __init__ 
dynamic-oit-vapornet-c-499:test dgrtwo$ python -c "from testpackage import testmod" 
Initializing __init__ 
Initializing testmod 

यह नहीं, तथापि, __init__.py से चर को testmod.py पहुँच प्रदान करता है। यह स्पष्ट रूप से किया जाना है।

+1

धन्यवाद। मुझे ये अब मिला। आप कभी नहीं जानते कि जादू क्या है और जब तक आप इसे एक बार कोशिश नहीं करते हैं तब तक नहीं होता है। :) –

2

पैकेज किसी भी तरह से उन सभी मॉड्यूल को एक साथ रोल नहीं करते हैं। जब तक आप इसे आयात नहीं करते हैं, तब तक अन्य मॉड्यूल में पहुंचने के लिए __init__ में सामानों का कोई कारण नहीं है।

संबंधित मुद्दे