सभी स्पष्टीकरण पायथन डॉक्यूमेंटेशन पायथन ट्यूटोरियल में पाए जा सकते हैं
अपनी पहली त्रुटि के लिए <type 'exceptions.NameError'>: name 'outer_var' is not defined
। स्पष्टीकरण है:
तरीकों के भीतर से डेटा विशेषताओं (या अन्य तरीकों!) को संदर्भित करने के लिए कोई आशुलिपि नहीं है। मुझे लगता है कि यह वास्तव में तरीकों की पठनीयता को बढ़ाता है: एक विधि के माध्यम से glancing जब स्थानीय चर और उदाहरण चर को भ्रमित करने का कोई मौका नहीं है।
पायथन ट्यूटोरियल 9.4 से उद्धृत
आपकी दूसरी त्रुटि के लिए <type 'exceptions.NameError'>: name 'OuterClass' is not defined
जब एक वर्ग परिभाषा सामान्य रूप से (अंत के माध्यम से) छोड़ दी जाती है, तो एक वर्ग वस्तु बनाई जाती है।
पायथन ट्यूटोरियल 9.3.1 से उद्धृत
इसलिए जब आप कोशिश करते हैं inner_var = Outerclass.outer_var
, तो Quterclass
अभी तक नहीं बनाया गया है, इसीलिएname 'OuterClass' is not defined
आपकी पहली त्रुटि के लिए एक अधिक विस्तृत लेकिन थकाऊ विवरण:
हालाँकि, कक्षाओं में एन्कोडिंग फ़ंक्शंस के स्कोप्स तक पहुँच होती है, हालाँकि, वे क्लास के भीतर नेस्टेड कोड को एनकोडिंग स्कोप्स के रूप में कार्य नहीं करते हैं: पाइथन संदर्भित नामों के लिए एन्क्लोज़िंग फ़ंक्शंस की खोज करता है, लेकिन कभी भी कोई एनक्लोज़िंग क्लासेस नहीं। यही है, एक वर्ग एक स्थानीय क्षेत्र है और स्थानीय स्कोपों को घेरने की पहुंच है, लेकिन यह नेस्टेड कोड के लिए एक स्थानीय स्कोप के रूप में काम नहीं करता है।
Learning.Python (5th) .Mark.Lutz से उद्धृत