वास्तविक शब्दों में (व्यावहारिक रूप से), पायथन में निजी सदस्य चर नामक कुछ भी नहीं है। हालाँकि, शुरुआत में दो अंडरलाइन (__) जोड़ने से एक वैरिएबल या एक मेथड प्राइवेट बन जाता है, जो कि ज्यादातर पायथन कोड द्वारा इस्तेमाल किया जाने वाला कन्वेंशन है।
आइए इस अवधारणा को एक उदाहरण के माध्यम से समझते हैं -
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, in <module> foo.__privateMeth AttributeError: 'myClass' object has no attribute '__privateMeth'
उपरोक्त आउटपुट से, हम देख सकते हैं कि "myClass" वर्ग के बाहर, आप निजी विधि के साथ-साथ निजी चर तक नहीं पहुँच सकते। हालाँकि, कक्षा (myClass) के अंदर हम निजी चरों तक पहुँच सकते हैं। हैलो () विधि में, __privateVar चर का उपयोग किया जा सकता है (जैसा कि ऊपर दिखाया गया है:"निजी चर मान:27")।
तो उपरोक्त उदाहरण से, हम समझ सकते हैं कि कक्षा के अंदर सभी चर और विधियां विधि द्वारा सार्वजनिक हैं। जब हम डेटा सदस्य को निजी घोषित करते हैं, तो इसका मतलब है कि वे केवल वर्ग के पक्ष में पहुंच योग्य हैं और कक्षा के बाहर पहुंच योग्य नहीं हैं। एक चर या विधि को निजी बनाने की तकनीक को डेटा मैंगलिंग कहा जाता है। फ़ॉर्म का कोई भी पहचानकर्ता __स्पैम (कम से कम दो प्रमुख अंडरस्कोर, अधिकतम एक पिछला अंडरस्कोर) को टेक्स्ट के रूप में _classname__spam से बदल दिया जाता है , जहां वर्गनाम एक अग्रणी अंडरस्कोर के साथ वर्तमान वर्ग का नाम छीन लिया गया है। यह मैंगलिंग पहचानकर्ता की वाक्यात्मक स्थिति की परवाह किए बिना किया जाता है, जब तक कि यह एक वर्ग की परिभाषा के भीतर होता है।
डबल अंडरस्कोर नाम इसके बजाय एक उपवर्ग द्वारा आकस्मिक ओवरराइडिंग से बचने के लिए हैं।