Python Encapsulation in Hindi: Public, Private, Protected and @property Explained
Python Encapsulation
Object-Oriented Programming (OOP) के मुख्य स्तंभों में से एक सबसे महत्वपूर्ण सिद्धांत है — Encapsulation (डेटा बंडलिंग और सुरक्षा)। जब हम सॉफ्टवेयर बनाते हैं, तो हम नहीं चाहते कि कोई भी बाहरी कोड हमारे संवेदनशील डेटा (जैसे पासवर्ड, बैंक बैलेंस आदि) को सीधे बदल सके। Encapsulation इसी सुरक्षा और नियंत्रण को लागू करता है।
अगर आपने अभी तक Python Classes & Objects नहीं पढ़ा है, तो पहले उसे पढ़ना जरूरी है, क्योंकि Encapsulation पूरी तरह Class के अंदर डेटा को सुरक्षित रखने पर आधारित है। कोड को खुद चलाकर देखने के लिए हमारा Online Python Editor & Compiler इस्तेमाल करें।
_var) और Private (__var) मेंबर्स क्या होते हैं, Name Mangling क्या है, Getter/Setter और @property से डेटा एक्सेस को कैसे सुरक्षित रखा जाता है।
Encapsulation क्या है?
Encapsulation वह प्रक्रिया है जिसमें डेटा (variables/attributes) और उस डेटा पर काम करने वाले फ़ंक्शन्स (methods) को एक सिंगल यूनिट — यानी Class के अंदर एक कैप्सूल (Capsule) की तरह बांधकर रखा जाता है।
सरल भाषा में — Encapsulation का मतलब है: "डेटा और उसके तरीकों को एक साथ पैक करना और अनधिकृत सीधे बदलाव (direct unauthorized access) से सुरक्षित रखना।"
Encapsulation की जरूरत क्यों होती है?
मान लीजिए आपके पास एक BankAccount क्लास है जिसमें balance = 5000 है। अगर कोई बाहर से सीधे acc.balance = -100000 कर दे, तो आपका सिस्टम क्रैश या नुकसान में आ जाएगा। Encapsulation हमें यह नियंत्रण देता है कि कोई भी डेटा सीधे बाहर से न बदला जा सके, बल्कि नियमों और वैलिडेशन (जैसे methods) के ज़रिए ही एक्सेस किया जाए।
Access Modifiers: Public, Protected और Private
Python में C++ या Java की तरह public या private कीवर्ड्स नहीं होते। यहाँ नामकरण परंपरा (naming convention) यानी Underscores (_) के ज़रिए एक्सेस कंट्रोल तय किया जाता है:
1. Public Members (डिफ़ॉल्ट)
जिन variables या methods के नाम के आगे कोई underscore नहीं होता, वे Public होते हैं। इन्हें क्लास के अंदर और बाहर कहीं से भी सीधे इस्तेमाल और बदला जा सकता है।
Output:
2. Protected Members (_variable)
जिस variable के नाम के आगे एक सिंगल अंडरस्कोर (_) लगा हो, वह Protected माना जाता है।
Python का नियम: यह कोई सख्त पाबंदी नहीं लगाता, बल्कि यह डेवलपर्स के बीच एक चेतावनी (convention) होती है कि "कृपया इसे क्लास या इसकी चाइल्ड क्लास के बाहर सीधे एक्सेस न करें।"
3. Private Members (__variable)
जिस variable के नाम के आगे दो अंडरस्कोर (__) लगे हों, वह Private होता है। इसे क्लास के बाहर से सीधे एक्सेस नहीं किया जा सकता।
Error Message:
Python Name Mangling क्या है?
जब आप किसी variable के आगे दो अंडरस्कोर (__var) लगाते हैं, तो Python अंदरूनी तौर पर उसका नाम बदलकर _ClassName__var कर देता है। इसी प्रोसेस को Name Mangling कहते हैं ताकि चाइल्ड क्लास में नाम आपस में टकराएं नहीं।
Output:
हालाँकि यह मुमकिन है, लेकिन कभी भी प्रोडक्शन कोड में प्राइवेट डेटा को इस तरह एक्सेस नहीं करना चाहिए।
Getter और Setter Methods
प्राइवेट डेटा को सुरक्षित तरीके से पढ़ने के लिए Getter और उसमें जरूरी वैलिडेशन के साथ बदलाव करने के लिए Setter मेथड बनाए जाते हैं।
Output:
@property Decorator (Pythonic Getter और Setter)
Python में get_balance() या set_balance() बार-बार लिखने की बजाय हम @property डेकोरेटर का इस्तेमाल करते हैं। इससे मेथड को कॉल करते समय () लगाने की जरूरत नहीं पड़ती और कोड एकदम साफ दिखता है।
Output:
Practical Example — Employee Salary System
आइए इसे एक कंपनी के एम्प्लॉई सैलरी सिस्टम से समझते हैं जहाँ सैलरी को प्राइवेट रखकर सिर्फ अधिकृत तरीके से इन्क्रीमेंट दिया जाता है:
Output:
Common Beginner Mistakes
हमेशा क्लास के अंदर Getter method या @property बनाकर ही वैल्यू एक्सेस करें।
_variable सिर्फ एक convention (सलाह) है। Python इसपर कोई एक्सेस रोक नहीं लगाता। वास्तविक छिपाव के लिए डबल अंडरस्कोर (__variable) का इस्तेमाल करें।
Exercise ?
Python में किसी variable को Private बनाने के लिए उसके नाम के आगे क्या लगाया जाता है?
Beginner Practical Coding Challenge
अब अपने Online Python Editor में यह अभ्यास प्रश्न पूरा कीजिए:
- एक
UserAccountक्लास बनाइए जिसमेंusername(Public) और__password(Private) हो। - एक मेथड
check_password(self, input_password)बनाइए जो सही पासवर्ड मैच होने परTrueऔर गलत होने परFalseलौटाए। - एक
set_password(self, old_pwd, new_pwd)मेथड बनाइए जो तभी नया पासवर्ड सेट करे जब पुराना पासवर्ड सही हो और नया पासवर्ड कम से कम 6 अक्षरों का हो। - ऑब्जेक्ट बनाकर पासवर्ड बदलने और चेक करने का फ्लो टेस्ट करें।
Quick Revision
| प्रकार / सिंटेक्स | एक्सेस स्तर (Access Level) | मुख्य उद्देश्य |
|---|---|---|
self.name | Public | कहीं से भी सीधे एक्सेस और मॉडिफाई हो सकता है |
self._project | Protected | केवल क्लास और सब-क्लास के लिए (डेवलपर कन्वेंशन) |
self.__balance | Private | क्लास के बाहर सीधे छिपा रहता है (Name Mangling लागू) |
_ClassName__var | Name Mangled | प्राइवेट वेरिएबल का आंतरिक असली नाम |
@property | Pythonic Getter | मेथड को प्रॉपर्टी की तरह पढ़ने की सुविधा देता है |
@prop.setter | Pythonic Setter | डेटा सेट करते समय वैलिडेशन लगाने की सुविधा देता है |
FAQ
Python में Encapsulation क्या है?
Encapsulation डेटा (attributes) और कोड (methods) को एक क्लास में सुरक्षित बाँधने और बाहरी अनधिकृत बदलाव से सुरक्षित रखने की तकनीक है।
क्या Python में कोई variable 100% Private हो सकता है?
नहीं, Python में Name Mangling के ज़रिए _ClassName__variable लिखकर प्राइवेट डेटा को भी पढ़ा जा सकता है। Python डेवलपर्स को जिम्मेदार मानता है ("We are all consenting adults here")।
Single Underscore और Double Underscore में क्या फर्क है?
सिंगल अंडरस्कोर (_var) सिर्फ डेवलपर्स के लिए एक संकेत है कि इसे बाहर यूज़ न करें (Protected), जबकि डबल अंडरस्कोर (__var) पर Python Name Mangling लागू करके उसे सीधे बाहर से छुपा देता है (Private)।
Getter और Setter का मुख्य फायदा क्या है?
Getter और Setter हमें डेटा में फेरबदल करने से पहले कंडीशन और वैलिडेशन (जैसे सैलरी > 0, पासवर्ड लेंथ) लगाने की पूरी आजादी देते हैं।
Summary
Encapsulation = डेटा और मेथड्स को क्लास कैप्सूल में बांधना + प्राइवेट डेटा पर वैलिडेशन के साथ सुरक्षित नियंत्रण रखना।
इस ट्यूटोरियल में आपने सीखा कि Encapsulation क्या है, Public, Protected और Private मेंबर्स कैसे काम करते हैं, Name Mangling क्या है, और Getter/Setter व @property से डेटा को सुरक्षित कैसे रखा जाता है।
अब ऊपर दिया गया UserAccount कोडिंग चैलेंज अपने ऑनलाइन कंपाइलर में रन करें और खुद प्रैक्टिस करें।
Related Articles
Python code likho, run karo aur practice karo — directly browser mein.

कोई टिप्पणी नहीं:
एक टिप्पणी भेजें