आप self
की जरूरत है: की तरह ऐसा लगता है कि आप कर रहे हैं
अजगर में
self.__private()
क्लासेस, आप सी #/सी ++/जावा से आ रहे हैं, तो करने के लिए इस्तेमाल हो रही है ले लो। यह शायद शब्दों की चीजों के "पायथनिक" तरीके को कुचलने वाला है, लेकिन आप इसके बारे में सोच सकते हैं (इससे मुझे मदद मिली):
प्रत्येक श्रेणी self
के रूप में परिभाषित नामस्थान को परिभाषित करती है और बिना किसी नाम से उस वर्ग का एक उदाहरण। दो अंडरस्कोर के साथ "निजी" चीजें उलझन में आती हैं ताकि बिना आपको इसे किसी विशेष नाम से कॉल कर सकें, लेकिन भीतर से आप आसानी से का उपयोग कर सकते हैं।
जो उसकी टिप्पणी सामान्य निजी चर में उल्लेख किया है आम तौर पर सिर्फ एक अंडरस्कोर के साथ नाम हैं, डबल अंडरस्कोर यह इतना विरासत उप-वर्गों में नाम संघर्ष के बिना काम कर सकते हैं mangles। पायथन में गोपनीयता का कोई प्रवर्तन नहीं है, यह पूरी तरह से सम्मेलन है जो कहता है कि आप वर्ग के बाहर से एक निजी चर का उपयोग नहीं कर सकते हैं।
जैसा कि थॉमस ने उल्लेख किया है, self
भी एक सम्मेलन है। किसी भी विधि के लिए उदाहरण है कि विधि पर में पारित पहले पैरामीटर है बुलाया जा रहा है (एक समारोह एक वर्ग का हिस्सा के रूप में घोषित) तुम बस के रूप में आसानी से कर सकता है:।
def __private(randomText):
print "Hey man! This is private!"
def public(otherRandomText):
otherRandomText.__private()
print "I don't care if you see this!"
हालांकि, अगर आप ऐसा कर तर्क और अच्छी प्रोग्रामिंग शैली की आत्माएं आपको और आपके वंशजों को अनंत काल तक डराएंगी। (self
बहुत बेहतर है)।
कोई भी Pythonistas सही/आगे व्याख्या करने की इच्छा है?
, यदि आप नहीं पहले से ही है, प्रलेखन के इस खंड को पढ़ने: http://docs.python.org/tutorial/classes.html#private-variables एकल अंडरस्कोर "निजी" चर के लिए सामान्य सम्मेलन हैं। जब आप अपने 'MyClass' से प्राप्त कक्षाओं में नाम संघर्ष से बचना चाहते हैं तो आप आमतौर पर केवल डबल अंडरस्कोर का उपयोग करते हैं। डबल अंडरस्कोर नाम मैंगलिंग का आह्वान करेगा, जो आप यहां चाहते थे, लेकिन मैं यह सुनिश्चित करना चाहता था कि आप इसके बारे में जानते हैं ... –
कृपया '__' का उपयोग न करें। यह "नाम मैंगलिंग" के लिए आरक्षित है, एक चीज पाइथन आंतरिक रूप से यह सुनिश्चित करने के लिए करती है कि आंतरिक नाम कभी भी टकराए न हों। –