किसी वस्तु की विशेषताएँ वर्ग परिभाषा के बाहर दिखाई दे भी सकती हैं और नहीं भी। आपको डबल अंडरस्कोर उपसर्ग के साथ विशेषताओं का नाम देना होगा, और फिर वे विशेषताएँ बाहरी लोगों को सीधे दिखाई नहीं देंगी।
उदाहरण
#!/usr/bin/python class JustCounter: __secretCount = 0 def count(self): self.__secretCount += 1 print self.__secretCount counter = JustCounter() counter.count() counter.count() print counter.__secretCount
आउटपुट
जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -
1 2 Traceback (most recent call last): File "test.py", line 12, in <module> print counter.__secretCount AttributeError: JustCounter instance has no attribute '__secretCount'
पायथन आंतरिक रूप से नाम बदलकर वर्ग नाम शामिल करके उन सदस्यों की रक्षा करता है। आप ऐसी विशेषताओं को object._className__attrName के रूप में एक्सेस कर सकते हैं। यदि आप निम्न के रूप में अपनी अंतिम पंक्ति को प्रतिस्थापित करते हैं, तो यह आपके लिए काम करती है -
......................... print counter._JustCounter__secretCount
जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -
1 2 2