पाइथन मूल बातें: ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (OOP)
पाइथन बुनियादी बातें: ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (OOP)
Lesson 5 of 7 • 10 XP
Keep your place in this quest
Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, सभी डेटा और मेथड को क्लास के बाहर से सीधे एक्सेस करने के लिए नहीं बनाया जाता। कभी-कभी आप आंतरिक विवरण छुपाना चाहते हैं ताकि वे केवल क्लास के अंदर ही उपयोग किए जा सकें।
Python में, आप किसी एट्रिब्यूट या मेथड को प्राइवेट संकेत देने के लिए इसके नाम की शुरुआत दो अंडरस्कोर (__) से कर सकते हैं।
हालांकि यह इसे पूरी तरह से असंभव नहीं बनाता, यह नेम मैंगलिंग नामक फीचर को सक्रिय कर देता है, जिससे एट्रिब्यूट का नाम आंतरिक रूप से बदल जाता है और इसे बाहर से एक्सेस करना मुश्किल हो जाता है।
प्राइवेट मेम्बर्स क्यों इस्तेमाल करें?
प्राइवेट एट्रिब्यूट्स और मेथड:
- डेटा को गलती से परिवर्तित होने से सुरक्षित रखने में मदद करते हैं।
- यह स्पष्ट करते हैं कि आपकी क्लास के कौन से हिस्से आंतरिक हैं और बाहरी कोड उन्हें भरोसा न करे।
- आंतरिक कार्यान्वयन को बिना टूटे हुए अन्य कोड को बदले बिना बदलने की अनुमति देते हैं जो आपकी क्लास का उपयोग करता है।
महत्वपूर्ण: Python में प्राइवेसी एक कन्वेंशन है, जबरदस्ती नहीं। प्राइवेट मेम्बर्स तक फिर भी पहुंचा जा सकता है यदि कोई वाकई कोशिश करे, लेकिन मकसद यह है कि आप नहीं करें।
उदाहरण: एक Person क्लास
class Person:
def __init__(self, name, age):
self.name = name # पब्लिक एट्रिब्यूट
self.__age = age # प्राइवेट एट्रिब्यूट
def print_name(self):
print("Name:", self.name)
def print_info(self):
self.print_name()
self.__print_age() # क्लास के अंदर से प्राइवेट मेथड कॉल करना
def __print_age(self): # प्राइवेट मेथड
print("Age:", self.__age)
p = Person("John", 30)
p.print_name() # काम करता है: Name: John
p.print_info() # काम करता है: Name: John Age: 30
यदि आप प्राइवेट एट्रिब्यूट को एक्सेस करने की कोशिश करें तो क्या होगा?
यदि आप क्लास के बाहर से प्राइवेट मेम्बर को सीधे एक्सेस करने की कोशिश करते हैं, तो आपको AttributeError मिलेगा:
p = Person("John", 30)
print(p.__age) # ❌ यह एरर करेगा
क्यों?
क्योंकि Python स्वचालित रूप से नाम __age को आंतरिक रूप से _Person__age में बदल देता है (नेम मैंगलिंग)। यह दुर्घटनावश एक्सेस या सबक्लास के साथ संघर्ष से बचाने में मदद करता है।
प्राइवेट डेटा को एक्सेस करना (अगर वाकई जरूरी हो)
तकनीकी रूप से, आप अभी भी उनके मैंगल्ड नाम का उपयोग करके प्राइवेट मेम्बर्स तक पहुंच सकते हैं:
print(p._Person__age) # 30
लेकिन यह प्राइवेट रखने के पूरे विचार को तोड़ता है — आपको यह सिर्फ दुर्लभ डिबगिंग स्थितियों में ही करना चाहिए, न कि सामान्य प्रोग्राम लॉजिक में।
प्राइवेट मेथड्स
सटीक एट्रिब्यूट्स की तरह, मेथड्स को भी दो अंडरस्कोर के साथ प्राइवेट बनाया जा सकता है।
हमारे उदाहरण में, __print_age() प्राइवेट है — आप इसे क्लास के बाहर से कॉल नहीं कर सकते:
p.__print_age() # ❌ यह एरर करेगा
लेकिन यह क्लास के अंदर ही पूरी तरह से काम करता है, जैसा कि print_info() में देखा गया है।
प्राइवेट मेम्बर्स कब उपयोग करें
प्राइवेट एट्रिब्यूट्स और मेथड्स का उपयोग करें जब:
- आप अपनी क्लास के आंतरिक हिस्सों के आकस्मिक दुरुपयोग को रोकना चाहते हैं।
- आपको डेटा तक पहुंच या संशोधन को नियंत्रित करने की आवश्यकता है (अक्सर getter और setter मेथड्स के साथ)।
- आप क्लास के पब्लिक API (जो बाहर से उपयोग के लिए है) और इसके implementation details के बीच स्पष्ट विभाजन बनाना चाहते हैं।
समापन
Python में प्राइवेट मेम्बर्स:
__(दो अंडरस्कोर) से शुरू होते हैं।- केवल आंतरिक उपयोग के लिए बनाए जाते हैं।
- नेम मैंगलिंग के जरिए तकनीकी रूप से पहुंच योग्य होते हैं, लेकिन आपको उनकी प्राइवेसी का सम्मान करना चाहिए।
वे अन्य प्रोग्रामर्स (और आपके भविष्य के स्वयं) को यह संकेत देते हैं कि क्या सुरक्षित है उपयोग करने के लिए और क्या एक आंतरिक विवरण है जिसे आप बाद में बिना चेतावनी के बदल सकते हैं।