एक प्रारंभिक बिंदु के रूप में, आप शायद PEP 8 - Style Guide For Python Code से उपयोगी इस उद्धरण मिलेगा:
इसके अलावा, प्रमुख या अंडरस्कोर अनुगामी का उपयोग कर विशेष रूपों निम्नलिखित पहचाने जाते हैं (इन्हें आम तौर पर किसी भी केस सम्मेलन के साथ जोड़ा जा सकता है):
_single_leading_underscore
: कमजोर "आंतरिक उपयोग" संकेतक। जैसे from M import *
ऑब्जेक्ट्स आयात नहीं करता है जिसका नाम अंडरस्कोर से शुरू होता है।
single_trailing_underscore_
: पाइथन कीवर्ड के साथ विवादों से बचने के लिए सम्मेलन द्वारा उपयोग किया जाता है, उदा। Tkinter.Toplevel(master, class_='ClassName')
__double_leading_underscore
: जब एक वर्ग विशेषता नामकरण, नाम mangling का आह्वान (कक्षा FooBar अंदर, __boo
_FooBar__boo
हो जाता है, नीचे देखें)।
__double_leading_and_trailing_underscore__
: "जादू" ऑब्जेक्ट्स या विशेषताएँ जो उपयोगकर्ता द्वारा नियंत्रित नामस्थान में रहते हैं। जैसे __init__
, __import__
या __file__
। ऐसे नामों का आविष्कार न करें; केवल उन्हें दस्तावेज के रूप में उपयोग करें।
आप वर्ग विशेषताओं के संदर्भ में पूछा है, हालांकि, तो चलो अपने विशिष्ट उदाहरणों पर एक नज़र डालें:
एकल अग्रणी रेखांकित
अपनी कक्षा self._var1
में एक विशेषता नामकरण के उपयोगकर्ता के लिए इंगित करता है वह वर्ग जो विशेषता को केवल कक्षा के आंतरिक (या शायद उप-वर्ग के उन लोगों द्वारा) तक पहुंचाया जाना चाहिए और उन्हें सीधे इसे एक्सेस करने की आवश्यकता नहीं है और शायद इसे संशोधित नहीं करना चाहिए। आपको उसी स्थान पर अग्रणी अंडरस्कोर का उपयोग करना चाहिए, जिसका उपयोग आप जावा या सी # में private
या protected
फ़ील्ड का उपयोग करेंगे, लेकिन ध्यान रखें कि भाषा वास्तव में गैर-पहुंच को लागू नहीं करती है - इसके बजाय आप अपने वर्ग के उपयोगकर्ता को भरोसेमंद कुछ भी करने के लिए भरोसा नहीं करते हैं, और उन्हें अपने वर्ग के निजी क्षेत्र तक पहुंचने (या संशोधित करने) का विकल्प छोड़ दें, यदि वे वास्तव में हैं, तो वास्तव में सुनिश्चित करें कि वे जानते हैं कि वे क्या कर रहे हैं और यह समझ में आता है।
एकल प्रमुख और अंडरस्कोर
self._var1_
अनुगामी कुछ मैंने आज तक देखा नहीं है। मुझे नहीं लगता कि इस नामकरण शैली के पास पाइथन दुनिया में कोई पारंपरिक अर्थ है।
डबल अग्रणी रेखांकित
यह एक वास्तव में वाक्य महत्व है। self.__var1
का जिक्र करते हुए आपकी कक्षा के दायरे में name mangling आमंत्रित किया गया है। आपकी कक्षा के बाहर से, चर self.__var1
के बजाय self._YourClassName__var1
पर दिखाई देगा। हर कोई इसका उपयोग नहीं करता है - हम बिल्कुल भी काम नहीं करते हैं - और सरल वर्गों के लिए यह एक अग्रणी अंडरस्कोर का उपयोग करने के लिए थोड़ा बेतुका और परेशान विकल्प जैसा लगता है।
हालांकि, इसके लिए एक औचित्य है; यदि आप बहुत सारी विरासत का उपयोग कर रहे हैं, तो यदि आप केवल एक अग्रणी अंडरस्कोर का उपयोग करते हैं तो आपके पास अपने कोड को 'निजी' और 'संरक्षित' चर के बीच का अंतर पढ़ने वाले किसी व्यक्ति को इंगित करने का कोई तरीका नहीं है - जिनके अर्थ भी नहीं हैं subclasses द्वारा उपयोग किया जा सकता है, और जो subclasses का उपयोग कर सकते हैं लेकिन बाहरी दुनिया नहीं हो सकता है। 'संरक्षित' और डबल 'अंडरस्कोर' का अर्थ 'निजी' के लिए एक एकल पिछला अंडरस्कोर का उपयोग करना इस स्थिति में एक उपयोगी सम्मेलन हो सकता है (और नाम मैंगलिंग एक उप-वर्गों को बिना किसी कारण के अपने उप-वर्ग में एक ही नाम के साथ एक चर का उपयोग करने की अनुमति देगा एक टक्कर)। क्योंकि डबल प्रमुख और अनुगामी अंडरस्कोर नामकरण शैली के नाम है कि एक विशेष अर्थ नहीं होता के लिए ही इस्तेमाल किया जा करने के लिए है
डबल प्रमुख और अंडरस्कोर
self.__var1__
अनुगामी, कुछ तुम कभी नहीं बनाना चाहिए जैसा कि मैंने सचमुच यह लिखा है है पाइथन द्वारा परिभाषित, __init__
या __eq__
कक्षाओं के तरीकों की तरह। आप अपनी कक्षा के व्यवहार को बदलने के लिए उन लोगों को ओवरराइड करने के लिए स्वतंत्र हैं (वास्तव में, लगभग सभी वर्गों में प्रोग्रामर-परिभाषित __init__
होगा), लेकिन आपको self.__var1__
जैसे इस शैली में अपना नाम नहीं बनाना चाहिए।
संभावित डुप्लिकेट: http://stackoverflow.com/questions/1301346/the-meaning-of-a-single-and-a-double-underscore-before-an-object-name-in-python और http: //stackoverflow.com/questions/935378/python-question-about-the-difference-beetween-method-and-method –