2012-08-30 17 views

उत्तर

19

__...__ का अर्थ आरक्षित पायथन नाम (दोनों फ़ाइल नामों और अन्य नामों में) है। आपको आविष्कार डबल-अंडरस्कोर नोटेशन का उपयोग करके अपने नामों का आविष्कार नहीं करना चाहिए; और यदि आप मौजूदा का उपयोग करते हैं, तो उनके पास विशेष कार्यक्षमता है।

इस विशेष उदाहरण में, __init__.py पैकेज के लिए 'मुख्य' इकाई को परिभाषित करता है; यह पाइथन को विशिष्ट निर्देशिका को पैकेज के रूप में पेश करने का भी कारण बनता है। यह इकाई है जिसका उपयोग तब किया जाएगा जब आप import cherryPy (और cherryPy एक निर्देशिका है) पर कॉल करेंगे। यह संक्षिप्त रूप से Modules tutorial में समझाया गया है।

एक और उदाहरण __eq__ विधि है जो कक्षा के लिए समानता तुलना प्रदान करता है। आपको उन विधियों को सीधे कॉल करने की अनुमति है (और उदाहरण के लिए, == ऑपरेटर का उपयोग करते समय आप उन्हें स्पष्ट रूप से उपयोग करते हैं); हालांकि, नए पायथन संस्करण इस तरह के तरीकों को परिभाषित कर सकते हैं और इस प्रकार आपको अपने __-नामों का आविष्कार नहीं करना चाहिए क्योंकि वे तब टकरा सकते हैं। आप Data model दस्तावेज़ों में ऐसी विधियों की विस्तृत सूची प्राप्त कर सकते हैं।

_... अक्सर 'आंतरिक' नाम के रूप में उपयोग किया जाता है। उदाहरण के लिए, _ से शुरू होने वाले मॉड्यूल का सीधे उपयोग नहीं किया जाना चाहिए; इसी प्रकार, _ के साथ विधियां माना जाता है-निजी और इसी तरह। यह सिर्फ एक सम्मेलन है लेकिन आपको इसका सम्मान करना चाहिए।

+4

आपको अपने नामों का आविष्कार करने से स्पष्ट रूप से प्रतिबंधित नहीं किया गया है।यह * निराश * है क्योंकि भाषा भविष्य में ऐसे अधिक नाम जोड़ सकती है, इसलिए नामस्थान आरक्षित है। अपनी परियोजनाओं के लिए '__...__' नामों का उपयोग करना आपके जोखिम पर है। –

+2

@MartijnPieters: ठीक है, इसे 'नहीं होना चाहिए' के ​​साथ बदल दिया। –

7

__init__.py एक विशेष फ़ाइल है कि, जब किसी फ़ोल्डर में मौजूद होता है तो वह फ़ोल्डर मॉड्यूल में बदल जाता है। मॉड्यूल आयात करने पर, __init__.py निष्पादित हो जाता है। दूसरा एक नामकरण सम्मेलन है लेकिन मुझे लगता है कि यह कहेंगे कि आपको उस फ़ाइल को सीधे आयात नहीं करना चाहिए।

यहां एक नज़र डालें: 6.4. Packages मॉड्यूल बनाने के तरीके के बारे में स्पष्टीकरण के लिए।

सामान्य नियम: यदि पायथन में कुछ भी नाम __anything__ है तो यह कुछ खास है और इसे उपयोग करने से पहले आपको इसके बारे में पढ़ना चाहिए (जैसे जादू कार्य)।

11

ये, और अन्य, नामकरण रिवाजों का में Style Guide for Python Code - Descriptive: Naming Styles

संक्षेप में विस्तार से वर्णित हैं:

  • __double_leading_and_trailing_underscore__: "जादू" वस्तुओं या विशेषताओं है कि उपयोगकर्ता के नियंत्रित नामस्थान में रहते हैं। जैसे __init__, __import__ या __file__। ऐसे नामों का आविष्कार न करें; केवल उन्हें दस्तावेज के रूप में उपयोग करें।
  • _single_leading_underscore: कमजोर "आंतरिक उपयोग" संकेतक। जैसे from M import * ऑब्जेक्ट्स आयात नहीं करता है जिसका नाम अंडरस्कोर से शुरू होता है।
संबंधित मुद्दे