2011-07-14 13 views
11

यह क्या सम्मेलन है?पायथन में, आवृत्ति चर के सामने अंडरस्कोर क्या है?

class IndexedText(object): 
    def __init__(self, stemmer, text): 
     self._text = text 
     self._stemmer = stemmer 
     self._index = nltk.Index((self._stem(word), i) for (i, word) in enumerate(text)) 
+0

की [एक वस्तु से पहले एक एकल और एक डबल अंडरस्कोर का अर्थ क्या है संभावित डुप्लिकेट हैं नाम?] (http://stackoverflow.com/questions/1301346/what-is-the-meaning-of-a-single-and-a-double-unde rscore-before-an-object-name) – xli

उत्तर

1

यह एक सम्मेलन करते हुए कहा कि वर्ग/वस्तु के ग्राहकों उन विशेषताओं संभव के रूप में वे आंतरिक उपयोग के लिए कर रहे हैं का उपयोग कर से बचना चाहिए है।

12

_ सिग्नल कि ये निजी सदस्य हैं। यह किसी भी तरह से भाषा द्वारा लागू नहीं है, क्योंकि पाइथन प्रोग्रामर सभी "consenting adults" हैं।

+0

तो अंडरस्कोर का अर्थ है "निजी आवृत्ति परिवर्तनीय", लेकिन पायथन इसे लागू नहीं करता है, है ना? यह सिर्फ एक सम्मेलन है। – TIMEX

+1

हाँ यदि आप ऐसा करते हैं तो बाहर पाइथन बल या शिकायत नहीं करता है (बाहर से एक्सेस)। और आम तौर पर इसे डेवलपर्स द्वारा आंतरिक रूप से उपयोग किए जाने वाले चर के बीच अंतर जानने के लिए अपनाया जाता है और जिसे बाहर से या उदाहरण चर के रूप में प्रस्तुत किया जाना है –

+0

हालांकि, मैं भाषा को लागू करना पसंद करूंगा क्योंकि यह अन्यथा समझ में नहीं आता है किसी वास्तविक कारण के लिए बाहर से आंतरिक चर के लिए –

2

यह केवल आंतरिक उपयोग (अन्य भाषाओं में निजी के समान) का तात्पर्य है, लेकिन यह अन्य भाषाओं की तरह प्रतिबंधित नहीं है।

11

PEP 8 के अनुसार:

इसके अलावा, निम्नलिखित विशेष प्रमुख या अंडरस्कोर अनुगामी का उपयोग कर रूपों पहचाने जाते हैं (ये आम तौर पर किसी भी मामले सम्मेलन के साथ जोड़ा जा सकता है):

  • _single_leading_underscore: कमजोर "आंतरिक उपयोग" संकेतक। जैसे "एम आयात * से" उन वस्तुओं को आयात नहीं करता है जिनके नाम अंडरस्कोर से शुरू होते हैं।

यह वास्तव में एक वर्ग के एक सदस्य में एक भी अंडरस्कोर के उपयोग का उल्लेख नहीं करता है, लेकिन इन करते हैं "आंतरिक उपयोग के" अर्थ में किया जाता किया जाना है। एक ही चीज के एक मजबूत संस्करण के लिए, दो अग्रणी अंडरस्कोर (उदा। self.__foo) का उपयोग करें - पायथन सदस्य को गलती से ओवरराइट करने से उप-वर्गों को रोकने के लिए एक मजबूत प्रयास करेगा, लेकिन निर्धारित कोड निश्चित रूप से ऐसा कर सकता है।

+0

तो मूल रूप से, मुझे अंडरस्कोर का उपयोग करने की आवश्यकता नहीं है। सही बात? – TIMEX

+0

@TIMEX: नहीं, आपको इसका उपयोग करने की आवश्यकता नहीं है। और यदि आप करते हैं, तो किसी और को इसका सम्मान करने की आवश्यकता नहीं है।लेकिन यह एक काफी आम सम्मेलन है, इसलिए इसका उपयोग करने से कोई नुकसान नहीं होने की संभावना है। –

+3

@TIMEX: यह शब्द "सम्मेलन" की परिभाषा है, हां। यह लागू नहीं है, लेकिन यह चोट नहीं पहुंचाता है और अक्सर इसका पालन करने में मददगार होता है। – Santa

0

इसका मतलब यह है कि वे गुण केवल आंतरिक उपयोग के लिए हैं और यदि संभव हो तो उन्हें स्पर्श न करें।

मान लें कि आप कुछ मौजूदा कोड संपादित कर रहे हैं और आप उनके सामने अंडरस्कोर के साथ चर देख रहे हैं। इसका मतलब है कि आपको उन्हें संपादित नहीं करना चाहिए। बस एक चेतावनी।

तो

self.name = a

self._name =a

self.__name=a

सभी एक ही

+4

वे वास्तव में सभी समान नहीं हैं, कम से कम इस अर्थ में कि वे एक दूसरे के बदले नहीं हैं। आपको संपत्ति को उस नाम से एक्सेस करने की आवश्यकता है जिसे परिभाषित किया गया था (चाहे वह 0,1 या 2 अग्रणी अंडरस्कोर हों)। अंडरस्कोर प्रोग्रामर को नोटिस के रूप में कार्य करता है, लेकिन दुभाषिया "केवल आंतरिक उपयोग" सुझाव को लागू नहीं करता है। –

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