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

पायथन लेखन त्रुटि:'विधि' वस्तु सबस्क्रिप्ट योग्य समाधान नहीं है

पायथन विधियों में तर्कों को कोष्ठक के भीतर निर्दिष्ट किया जाना चाहिए। ऐसा इसलिए है क्योंकि फ़ंक्शन और विधियां दोनों यह बताने के लिए कोष्ठक का उपयोग करती हैं कि क्या उन्हें बुलाया जा रहा है। यदि आप किसी विधि को कॉल करने के लिए वर्गाकार कोष्ठकों का उपयोग करते हैं, तो आप एक "लेखन त्रुटि:'विधि' वस्तु सबस्क्रिप्ट योग्य नहीं है" त्रुटि का सामना करेंगे।

इस गाइड में, हम चर्चा करते हैं कि इस त्रुटि का क्या अर्थ है और आपको इसका सामना क्यों करना पड़ सकता है। समाधान विकसित करने में आपकी सहायता के लिए हम इस त्रुटि के एक उदाहरण के माध्यम से चलते हैं।

लेखन त्रुटि:'विधि' ऑब्जेक्ट सबस्क्रिप्ट करने योग्य नहीं है

सबस्क्रिप्ट करने योग्य वस्तुएँ __getitem__ विधि वाली वस्तुएँ होती हैं। ये डेटा प्रकार हैं जैसे सूचियाँ, शब्दकोश और टुपल्स। __getitem__ विधि पायथन दुभाषिया को एक संग्रह से एक व्यक्तिगत वस्तु को पुनः प्राप्त करने की अनुमति देती है।

सभी ऑब्जेक्ट सबस्क्रिप्ट करने योग्य नहीं हैं। उदाहरण के लिए, तरीके नहीं हैं। ऐसा इसलिए है क्योंकि वे __getitem__ पद्धति को लागू नहीं करते हैं। इसका मतलब है कि आप किसी विधि में आइटम तक पहुंचने या किसी विधि को कॉल करने के लिए स्क्वायर ब्रैकेट सिंटैक्स का उपयोग नहीं कर सकते हैं।

निम्नलिखित कोड स्निपेट पर विचार करें:

चीज़ =["एडम", "स्टिल्टन", "इंग्लिश चेडर", "परमेसन"]प्रिंट (चीज़[0])

यह कोड "एडम", पनीर को सूचकांक स्थिति 0 पर लौटाता है। हम किसी फ़ंक्शन या विधि को कॉल करने के लिए वर्ग कोष्ठक का उपयोग नहीं कर सकते क्योंकि फ़ंक्शन और विधियाँ सबस्क्रिप्ट करने योग्य ऑब्जेक्ट नहीं हैं।

एक उदाहरण परिदृश्य

यहां, हम एक प्रोग्राम बनाते हैं जो चीज़ों को वस्तुओं में संग्रहीत करता है। पनीर को परिभाषित करने के लिए हम जिस "चीज" वर्ग का उपयोग करते हैं, उसमें एक विधि होगी जो हमें यह जांचने देती है कि पनीर किसी विशेष देश का है या नहीं।

हमारे चीज के लिए एक वर्ग परिभाषित करके प्रारंभ करें। हम इस वर्ग को पनीर कहते हैं:

81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।

बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।

क्लास चीज़:def __init__(self, name, Origin):self.name =name self.origin =मूल def get_country(self, to_compare):if to_compare ==self.origin:print("{} से है { }.".format(self.name, self.origin)) और:प्रिंट ("{} {} से नहीं है। यह {}" से है। प्रारूप (self.name, to_compare, self.origin)) 

हमारी कक्षा में दो विधियाँ हैं। पहली विधि पनीर वस्तु की संरचना को परिभाषित करती है। दूसरा हमें यह जांचने देता है कि क्या पनीर की उत्पत्ति का देश एक विशेष मूल्य के बराबर है।

इसके बाद, हम अपने चीज़ क्लास से एक ऑब्जेक्ट बनाते हैं:

एडम =चीज़ ("एडम", "नीदरलैंड्स")

चर "एडम" एक वस्तु है। पनीर से जुड़ा नाम एडम है और इसका मूल देश नीदरलैंड है।

इसके बाद, हमारे get_country() . पर कॉल करें तरीका:

edam.get_country["जर्मनी"]

यह कोड get_country() को निष्पादित करता है पनीर वर्ग से विधि। get_country() विधि जांचती है कि क्या हमारे "एडम" ऑब्जेक्ट में "ओरिजिन" का मान "जर्मनी" के बराबर है।

हमारा कोड चलाएँ और देखें कि क्या होता है:

ट्रेसबैक (सबसे हालिया कॉल अंतिम):फ़ाइल "main.py", पंक्ति 14, <मॉड्यूल> edam.get_country["जर्मनी"]लेखन त्रुटि:'विधि' ऑब्जेक्ट सबस्क्रिप्ट करने योग्य नहीं है

हमारे कोड में एक त्रुटि होती है।

समाधान

आइए कोड की उस पंक्ति का विश्लेषण करें जिसे पायथन डिबगर ने गलत के रूप में पहचाना है:

edam.get_country["जर्मनी"]

कोड की इस पंक्ति में, हम get_country() . को कॉल करने के लिए वर्गाकार कोष्ठकों का उपयोग करते हैं तरीका। यह स्वीकार्य सिंटैक्स नहीं है क्योंकि किसी सूची से आइटम तक पहुंचने के लिए वर्ग कोष्ठक का उपयोग किया जाता है। क्योंकि फ़ंक्शंस और ऑब्जेक्ट सबस्क्रिप्ट करने योग्य नहीं हैं, हम उन्हें कॉल करने के लिए वर्गाकार कोष्ठकों का उपयोग नहीं कर सकते हैं।

इस त्रुटि को हल करने के लिए, हमें वर्गाकार कोष्ठकों को कर्ली कोष्ठकों से बदलना होगा:

edam.get_country("जर्मनी")

आइए अपना कोड चलाएं और देखें कि क्या होता है:

एडम जर्मनी से नहीं है। यह नीदरलैंड से है।

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

edam.get_country("नीदरलैंड्स")

हमारा कोड लौटाता है:

एडम नीदरलैंड से है।

हमारा कोड तभी काम करता है जब हम जो मान निर्दिष्ट करते हैं वह पनीर के मूल देश के बराबर हो।

निष्कर्ष

जब आप किसी वर्ग के अंदर किसी विधि को कॉल करने के लिए वर्ग कोष्ठक का उपयोग करते हैं तो "लेखन त्रुटि:'विधि' वस्तु सबस्क्रिप्ट योग्य नहीं है" त्रुटि उत्पन्न होती है। इस त्रुटि को हल करने के लिए, सुनिश्चित करें कि आप जिस विधि को कॉल करना चाहते हैं उसके नाम के बाद केवल घुंघराले ब्रैकेट का उपयोग करके कक्षा के तरीकों को कॉल करें।

अब आप एक पेशेवर कोडर की तरह इस सामान्य पायथन त्रुटि को हल करने के लिए तैयार हैं!


  1. लेखन त्रुटि:'अपरिभाषित' जावास्क्रिप्ट में एक वस्तु नहीं है

    लेखन त्रुटि:अपरिभाषित एक वस्तु नहीं है त्रुटि तब होती है जब किसी संपत्ति का उपयोग किया जाता है या किसी अपरिभाषित वस्तु पर एक विधि को कॉल किया जाता है। यह त्रुटि केवल सफारी ब्राउज़र पर दिखाई जाती है। TypeError के लिए कोड निम्नलिखित है - अपरिभाषित जावास्क्रिप्ट में ऑब्जेक्ट त्रुटि नहीं है - उदाहरण दस

  1. पायथन - सीएमपी () विधि

    सीएमपी () पायथन मानक पुस्तकालय का हिस्सा है जो दो पूर्णांकों की तुलना करता है। तुलना का परिणाम -1 है यदि पहला पूर्णांक दूसरे से छोटा है और 1 यदि पहला पूर्णांक दूसरे से बड़ा है। यदि दोनों बराबर हैं तो cmp() का परिणाम शून्य है। नीचे दिए गए उदाहरण में सीएमपी () पद्धति के उपयोग को दर्शाने वाले विभिन्न

  1. पायथन में 'नॉट इन' ऑपरेटर क्या करता है?

    पायथन में, इन और नॉट इन ऑपरेटर्स को मेंबरशिप ऑपरेटर कहा जाता है। उनका उद्देश्य यह जांचना है कि क्या कोई वस्तु किसी निश्चित अनुक्रम वस्तु जैसे स्ट्रिंग, सूची या टपल का सदस्य है। यदि ऑब्जेक्ट क्रम में मौजूद है, तो नॉट इन ऑपरेटर असत्य लौटाता है, यदि नहीं मिला तो सही है >>> 'p' not in &