Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन प्रोग्राम में प्राइवेट वेरिएबल्स


इस ट्यूटोरियल में, हम पायथन क्लासेस में प्राइवेट वेरिएबल्स के बारे में जानेंगे।

पायथन में प्राइवेट वेरिएबल्स नामक कोई अवधारणा नहीं है। लेकिन, अधिकांश पायथन डेवलपर्स एक नामकरण परंपरा का पालन करते हैं ताकि यह बताया जा सके कि कोई वेरिएबल पब्लिक नहीं है और यह प्राइवेट है।

किसी वेरिएबल को प्राइवेट वेरिएबल के रूप में दर्शाने के लिए (वास्तव में नहीं), हमें उसके नाम की शुरुआत डबल अंडरस्कोर से करनी होती है। उदाहरण:- __one, __two आदि।

जैसा कि हम पहले ही कह चुके हैं, जिन वेरिएबल्स के नाम डबल अंडरस्कोर से शुरू होते हैं, वे वास्तव में प्राइवेट नहीं होते। हम फिर भी उन्हें एक्सेस कर सकते हैं। आइए देखें कि प्राइवेट-टाइप वेरिएबल्स कैसे बनाए जाते हैं और फिर उन्हें कैसे एक्सेस किया जाता है।

उदाहरण

# क्लास बनाना
class Sample:
    def __init__(self, nv, pv):
        # सामान्य वेरिएबल
        self.nv = nv
        # प्राइवेट वेरिएबल (वास्तव में नहीं)
        self.__pv = pv

# क्लास Sample का इंस्टेंस बनाना
sample = Sample('Normal variable', 'Private variable')

हमने एक क्लास और उसका इंस्टेंस बनाया है। __init__ मेथड के अंदर हमारे पास दो वेरिएबल हैं - एक सामान्य और दूसरा प्राइवेट। अब, इन वेरिएबल्स को एक्सेस करने का प्रयास करें और देखें क्या होता है।

उदाहरण

# क्लास बनाना
class Sample:
    def __init__(self, nv, pv):
        # सामान्य वेरिएबल
        self.nv = nv
        # प्राइवेट वेरिएबल (वास्तव में नहीं)
        self.__pv = pv

# क्लास Sample का इंस्टेंस बनाना
sample = Sample('Normal variable', 'Private variable')

# nv एक्सेस करना
print(sample.nv)

# __pv एक्सेस करने का प्रयास
print(sample.__pv)

आउटपुट

यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न आउटपुट मिलेगा।

Normal variable
---------------------------------------------------------------------------
AttributeError                              Traceback (most recent call last)
 in 
     14
     15 # accessing *__pv**
---> 16 print(sample.__pv)
AttributeError: 'Sample' object has no attribute '__pv'

प्रोग्राम ने nv वेरिएबल को बिना किसी त्रुटि के प्रदर्शित किया। लेकिन जब हम __pv वेरिएबल को एक्सेस करने का प्रयास करते हैं तो हमें AttributeError मिलता है।

हमें यह त्रुटि क्यों मिलती है? क्योंकि __pv नाम का कोई एट्रिब्यूट नहीं है। फिर __init__ मेथड में self.__pv = pv स्टेटमेंट का क्या? हम इस पर थोड़ी देर में चर्चा करेंगे। पहले, देखते हैं कि __pv वेरिएबल को कैसे एक्सेस किया जाए।

हम किसी भी क्लास वेरिएबल को जिसका नाम डबल अंडरस्कोर से शुरू होता है, _className__variableName_ के रूप में एक्सेस कर सकते हैं। हमारे उदाहरण में यह _Sample__pv_ है। अब, इसे _Sample__pv_ नाम का उपयोग करके एक्सेस करें।

उदाहरण

# क्लास बनाना
class Sample:
    def __init__(self, nv, pv):
        # सामान्य वेरिएबल
        self.nv = nv
        # प्राइवेट वेरिएबल (वास्तव में नहीं)
        self.__pv = pv

# क्लास Sample का इंस्टेंस बनाना
sample = Sample('Normal variable', 'Private variable')

# nv एक्सेस करना
print(sample.nv)

# __pv को _Sample__pv नाम का उपयोग करके एक्सेस करना
print(sample._Sample__pv)

आउटपुट

यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम मिलेगा।

Normal variable
Private variable

वेरिएबल __pv का नाम क्यों बदल गया?

पायथन में नेम मैंगलिंग नामक एक अवधारणा है। पायथन उन वेरिएबल्स के नाम बदल देता है जो डबल अंडरस्कोर से शुरू होते हैं। इसलिए, किसी भी क्लास वेरिएबल का नाम जो डबल अंडरस्कोर से शुरू होता है, वह _className__variableName_ फॉर्म में बदल जाएगा।

यह अवधारणा क्लास के मेथड्स पर भी लागू होती है। आप इसे निम्न कोड के साथ देख सकते हैं।

उदाहरण

class Sample:
    def __init__(self, a):
        self.a = a
    # प्राइवेट मेथड (वास्तव में नहीं)
    def __get_a(self):
        return self.a

# क्लास Sample का इंस्टेंस बनाना
sample = Sample(5)

# सही नाम के साथ मेथड को इनवोक करना
print(sample._Sample__get_a())

# गलत नाम के साथ मेथड को इनवोक करने का प्रयास
print(sample.__get_a())

आउटपुट

यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम मिलेगा।

5
---------------------------------------------------------------------------
AttributeError                              Traceback (most recent call last)
 in 
     14
     15 # invoking the method with wrong name
---> 16 print(sample.__get_a())
AttributeError: 'Sample' object has no attribute '__get_a'

निष्कर्ष

डबल अंडरस्कोर का उपयोग करने का उद्देश्य वेरिएबल या मेथड को एक्सेस करने से रोकना नहीं है। यह बताना है कि वह विशेष वेरिएबल या मेथड केवल क्लास के अंदर उपयोग के लिए है। यदि आपके पास ट्यूटोरियल से संबंधित कोई प्रश्न हैं, तो उन्हें कमेंट सेक्शन में बताएं।


  1. Python Program कैसे चलाएं? Python Program कैसे चलाएं?

    Code लिखने के बाद, हमें code को execute करके output प्राप्त करने के लिए run करने की आवश्यकता होती है। Program चलाने पर, हम जांच सकते हैं कि लिखा गया code सही है और desired output produce करता है। Python program चलाना काफी आसान काम है। IDLE पर चलाएं IDLE पर python program चलाने के लिए, दिए गए steps क

  1. Python प्रोग्राम में कैलेंडर Python प्रोग्राम में कैलेंडर

    Python में calendar नामक एक अंतर्निहित मॉड्यूल है जो कैलेंडर के साथ काम करने के लिए है। हम इस लेख में calendar मॉड्यूल के बारे में जानने जा रहे हैं। calendar मॉड्यूल में सप्ताह सोमवार से शुरू होता है और रविवार पर समाप्त होता है। मॉड्यूल कैलेंडर ग्रेगोरियन कैलेंडर का पालन करता है। आइए calendar मॉड्य

  1. पायथन प्रोग्राम: क्विकसॉर्ट पायथन प्रोग्राम: क्विकसॉर्ट

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक सरणी दी गई है, हमें क्विकसॉर्ट की अवधारणा का उपयोग करके इसे क्रमबद्ध करना है। यहां हम पहले सरणी को पार्टीशन करते हैं और क्रमबद्ध सरणी प्राप्त करने के लिए अलग-अलग पार्टीशन को क्रमबद्ध करते हैं। उदाहरण # विभाजन फ़ंक्शन def pa