व्यावहारिक रूप से, Python में प्राइवेट मेंबर वेरिएबल जैसी कोई चीज़ नहीं है। हालांकि, शुरुआत में दो अंडरस्कोर (__) जोड़ने से एक वेरिएबल या मेथड प्राइवेट हो जाता है, यह कन्वेंशन अधिकांश Python कोड द्वारा उपयोग किया जाता है।
आइए एक उदाहरण के माध्यम से इस अवधारणा को समझते हैं -
privateVar1.py
class myClass:
__privateVar = 27
def __privMeth(self):
print("I'm inside class myClass")
def hello(self):
print("Private Variable value: ", myClass.__privateVar)
foo = myClass()
foo.hello()
foo.__privateMeth
उपरोक्त प्रोग्राम में, __privMeth एक प्राइवेट मेथड है और __privateVar एक प्राइवेट वेरिएबल है। आइए अब इसका आउटपुट देखें -
आउटपुट
Private Variable value: 27 Traceback (most recent call last): File "C:/Python/Python361/privateVar1.py", line 12, infoo.__privateMeth AttributeError: 'myClass' object has no attribute '__privateMeth'
उपरोक्त आउटपुट से, हम देख सकते हैं कि क्लास "myClass" के बाहर, आप प्राइवेट मेथड के साथ-साथ प्राइवेट वेरिएबल को एक्सेस नहीं कर सकते। हालांकि, क्लास (myClass) के अंदर हम प्राइवेट वेरिएबल को एक्सेस कर सकते हैं। hello() मेथड में, __privateVar वेरिएबल को एक्सेस किया जा सकता है (जैसा कि ऊपर दिखाया गया है: "Private Variable value: 27")।
तो उपरोक्त उदाहरण से, हम समझ सकते हैं कि क्लास के अंदर सभी वेरिएबल और मेथड डिफ़ॉल्ट रूप से पब्लिक होते हैं। जब हम डेटा मेंबर को प्राइवेट घोषित करते हैं तो इसका मतलब है कि वे केवल क्लास के अंदर ही एक्सेसिबल हैं और क्लास के बाहर अप्राप्य हैं। वेरिएबल या मेथड को प्राइवेट बनाने की तकनीक को डेटा मैंगलिंग कहा जाता है। __spam रूप का कोई भी पहचानकर्ता (कम से कम दो लीडिंग अंडरस्कोर, अधिकतम एक ट्रेलिंग अंडरस्कोर) को टेक्स्टुअली _classname__spam से बदल दिया जाता है, जहां classname वर्तमान क्लास का नाम है जिसमें लीडिंग अंडरस्कोर हटा दिए गए हैं। यह मैंगलिंग पहचानकर्ता की सिंटैक्टिक स्थिति की परवाह किए बिना किया जाता है, जब तक यह क्लास की परिभाषा के भीतर होता है।
डबल अंडरस्कोर नाम सबक्लास द्वारा आकस्मिक ओवरराइडिंग से बचने के लिए होते हैं।