उन्नत पायथन विकास पाठ्यक्रम
अध्याय
>
स्तर
गणित मॉड्यूल्स
कोड आत्मनिरीक्षण
उद्देश्य
कोड इंट्रोस्पेक्शन का उपयोग करके अटारी में रखी कुछ पुरानी वस्तुओं का निरीक्षण करें, यह जानने के लिए कि वे क्या हैं और कैसे उपयोग की जाती हैं।
अटारी में एक कार्यालय है जिसका शायद ही कभी उपयोग होता है और कुछ पुरानी तिजोरियाँ हैं जिनमें कुछ मूल्यवान वस्तुएँ रखी हुई हैं जिन्हें काफी समय से भुला दिया गया है। यदि अन्यथा उल्लेख नहीं किया गया है या यदि कोई मेमो जानकारी प्रदान नहीं करता है, तो कभी-कभी वस्तुओं या फ़ील्ड पर एकत्र किए गए स्थायी मानों की पहचान करना काफी कठिन हो सकता है। इतना ही नहीं, यह भी पहचानना मुश्किल हो सकता है कि किसी विशिष्ट ऑब्जेक्ट के साथ आप क्या-क्या कर सकते हैं या उसकी विशेषताएँ क्या हैं। इसे संबोधित करने के लिए हम कोड इंट्रोस्पेक्शन का उपयोग कर सकते हैं।
कोड इंट्रोस्पेक्शन हमें कोड के कुछ अंशों का निरीक्षण करने और उनकी पहचान करने तथा उनके कुछ गुणों को इंगित करने की अनुमति देता है। इसके लिए हम बेस पायथन कोड के साथ पैकेज किए गए चार (4) बिल्ट-इन इंट्रोस्पेक्शन फ़ंक्शंस का उपयोग करेंगे: type(), id(), repr(), dir() और help()। ये इस प्रकार कार्य करते हैं:
type(): यह फ़ंक्शन बताता है कि आप द्वारा प्रदान किया गया तर्क किस प्रकार के ऑब्जेक्ट का है। उदाहरण के लिए, यदि आप एक चर को तर्क के रूप में देते हैं, तो फ़ंक्शन उस ऑब्जेक्ट को एक चर के रूप में पहचान लेगा।id(): पायथन में अब तक बनाए गए हर ऑब्जेक्ट का एक अद्वितीय आईडी होता है जो कोड में उस ऑब्जेक्ट की पहचान करता है। जब आप किसी ऑब्जेक्ट को इस फ़ंक्शन के तर्क के रूप में देते हैं, तो यह उस ऑब्जेक्ट का अद्वितीय आईडी लौटाता है।repr(): एक गैर-स्ट्रिंग मान को स्ट्रिंग में परिवर्तित करता है, जो डेटा को पठनीय रूप में परिवर्तित करने के लिए उपयोगी होता है।dir(): यह फ़ंक्शन उस ऑब्जेक्ट के सभी गुणों को प्रदर्शित करता है, जिससे यह जानने में मदद मिलती है कि किसी विशिष्ट ऑब्जेक्ट प्रकार से क्या किया जा सकता है।help(): पायथन की रजिस्ट्री में उपलब्ध किसी दिए गए ऑब्जेक्ट, फ़ंक्शन, क्लास आदि के बारे में सभी जानकारी प्रदर्शित करता है।
इसके अलावा हमारे पास एक नया async फ़ंक्शन है, जो display() नामक है। यह फ़ंक्शन read() फ़ंक्शन के समान है, लेकिन आपको डायनेमिक डेटा दिखाने की अनुमति देता है, ठीक वैसे ही जैसे कोड इंट्रोस्पेक्शन फ़ंक्शंस डायनेमिक डेटा उत्पन्न करते हैं। इसकी सिंटैक्स इस प्रकार है: await player.display( -data-)। ये सभी फ़ंक्शंस डेटा का विश्लेषण करने के लिए उपयोगी होंगे, चाहे हम मेथड्स का उपयोग करें और नए फ़ंक्शंस इम्पोर्ट करना शुरू करें या किसी भी कोड के गुणों का विश्लेषण करें जिन्हें हम पहचानना चाहते हैं।
हम इन फ़ंक्शंस का उपयोग करके अटारी में संग्रहित वस्तुओं की पहचान और सूची तैयार करेंगे। शुरुआत करने के लिए, लाल कालीन के ऊपर से शुरू करते हुए रंगीन कालीनों पर स्थित अंधेरे X चिह्नों के पास जाएँ। इस क्षेत्र में तीन (3) स्थायी मान हैं: red_container, green_container, और blue_container। ये स्थिर मान प्रत्येक तिजोरी में रखे कंटेनरों का प्रतिनिधित्व करते हैं, जो कि संबंधित रंगीन कालीन से मेल खाते हैं।
प्रत्येक X चिह्न के लिए, तिजोरी की ओर देखें और तिजोरियों को खोलने के लिए open() फ़ंक्शन का उपयोग करें, संबंधित रंगीन कालीन के स्थिर मान के साथ collect() फ़ंक्शन का उपयोग करके उसे तिजोरी से प्राप्त करें। उस तिजोरी में मौजूद स्थिर मान का प्रकार पहचानने के लिए type() इंट्रोस्पेक्शन फ़ंक्शन का उपयोग करें, जो आउटपुट कच्चे डेटा के रूप में देता है, और इसके लिए हम repr() फ़ंक्शन का उपयोग करते हैं ताकि इसे स्ट्रिंग में परिवर्तित किया जा सके। प्राप्त स्ट्रिंग को प्रदर्शित करने के लिए speak() का उपयोग करें, उदाहरण के लिए: player.speak(repr(type(red_container)))। इसके बाद सीधे सामग्री की पहचान करने के लिए स्थिर मान के साथ speak() फ़ंक्शन का उपयोग करें, उदाहरण के लिए: player.speak(red_container)।
जब तीनों (3) स्थिर मान एकत्र, इंट्रोस्पेक्ट और पहचान लिए जाएँ, तो डेस्क के सामने स्थित हल्के X चिह्न की ओर जाएँ। item_id_red, item_id_green, item_id_blue नाम के तीन वेरिएबल्स बनाएं, जो एकत्र किए गए प्रत्येक स्थिर मान के आईडी नंबर संग्रहीत करेंगे। उस स्थिर मान का अद्वितीय आईडी प्राप्त करने के लिए id() इंट्रोस्पेक्शन फ़ंक्शन का उपयोग करें और इसे तर्क के रूप में जोड़ें। वेरिएबल का नाम स्थिर मान के नाम के अनुरूप मिलाएं, उदाहरण के लिए: item_id_red = id(red_container); यह सभी तीन (3) वेरिएबल्स और स्थिर मानों के लिए करें।
जब तीनों (3) वेरिएबल्स भर जाएँ, तो उन्हें एक सूची item_list में संग्रहीत करें और हल्के X चिह्न पर display() फ़ंक्शन का उपयोग करें ताकि यह मेमो पर डेस्क पर नोट किया जा सके, इस प्रकार: await player.display(item_list)।
अब जब सूची को चार्ट कर लिया गया है, तो बैंगनी कालीन पर स्थित अंधेरे X चिह्न की ओर जाएँ और डेस्क का सामना करें। यहाँ हम dir() फ़ंक्शन का उपयोग करके इस बात की पहचान करेंगे कि सूची में कौन-कौन से गुण मौजूद हैं, हालांकि आउटपुट कच्चे डेटा के रूप में होता है जिससे इसे प्रदर्शित करना मुश्किल हो सकता है। इसके लिए हम repr() फ़ंक्शन का उपयोग करते हैं ताकि डेटा को पठनीय स्ट्रिंग में परिवर्तित किया जा सके। item_attributes नामक एक वेरिएबल बनाएं और परिणामी स्ट्रिंग को संग्रहीत करें, उदाहरण के लिए: item_attributes = repr(dir(item_list))। अंत में, यह सुनिश्चित करने के लिए display() फ़ंक्शन का उपयोग करें कि यह मेमो पर डेस्क पर नोट किया गया है।
श्वेत कालीन पर स्थित अंधेरे X चिह्न के पास जाएँ और वही करें जैसा आपने dir() के साथ किया था, लेकिन इस बार help() का उपयोग करें, जो ऑब्जेक्ट पर उपलब्ध सभी दस्तावेजीकरण जानकारी को प्रदर्शित करेगा। item_help नामक एक वेरिएबल बनाएं और परिणामी स्ट्रिंग को संग्रहीत करें, उदाहरण के लिए: item_help = repr(help(item_list))। अंत में, यह सुनिश्चित करने के लिए read() फ़ंक्शन का उपयोग करें कि यह मेमो पर डेस्क पर नोट किया गया है ताकि स्तर पूरा हो सके।