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

Python TypeError: 'method' object is not subscriptable समाधान

TypeError: 'method' object is not subscriptable

पायथन में, मेथड्स को कॉल करने के लिए पैरेंथेसिस ( ) का उपयोग करना आवश्यक होता है। यदि आप किसी मेथड को कॉल करने के लिए स्क्वायर ब्रैकेट्स [ ] का उपयोग करते हैं, तो आपको "TypeError: 'method' object is not subscriptable" एरर प्राप्त होगी।

सबस्क्रिप्टेबल ऑब्जेक्ट्स क्या होते हैं?

सबस्क्रिप्टेबल ऑब्जेक्ट्स वे होते हैं जिनमें __getitem__ मेथड होता है। ये डेटा टाइप्स होते हैं जैसे लिस्ट्स, डिक्शनरीज़, और टुपल्स। __getitem__ मेथड पायथन इंटरप्रेटर को कलेक्शन से व्यक्तिगत आइटम प्राप्त करने की अनुमति देता है।

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

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

यहाँ हम एक प्रोग्राम बनाते हैं जो चीज़ों को ऑब्जेक्ट्स में स्टोर करता है। "Cheese" क्लास जिसमें हम चीज़ को परिभाषित करते हैं, उसमें एक मेथड होगा जो चेक करेगा कि क्या कोई चीज़ किसी विशेष देश से संबंधित है।

class Cheese:
    def __init__(self, name, origin):
        self.name = name
        self.origin = origin
    
    def get_country(self, to_compare):
        if to_compare == self.origin:
            print("{} is from {}.".format(self.name, self.origin))
        else:
            print("{} is not from {}. It is from {}.".format(self.name, to_compare, self.origin))

हमारा क्लास दो मेथड्स रखता है। पहला मेथड Cheese ऑब्जेक्ट की संरचना को परिभाषित करता है। दूसरा हमें चेक करने देता है कि क्या चीज़ का मूल देश किसी विशेष मान के बराबर है।

अब, हम अपने Cheese क्लास से एक ऑब्जेक्ट बनाते हैं:

edam = Cheese("Edam", "Netherlands")

वेरिएबल "edam" एक ऑब्जेक्ट है। चीज़ से जुड़ा नाम Edam है और इसका मूल देश Netherlands है।

अब, आइए अपने get_country() मेथड को कॉल करें:

edam.get_country["Germany"]

यह कोड Cheese क्लास से get_country() मेथड को एक्जीक्यूट करता है। get_country() मेथड चेक करता है कि क्या हमारे "edam" ऑब्जेक्ट में "origin" का मान "Germany" के बराबर है।

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

Traceback (most recent call last):
  File "main.py", line 14, in 
    edam.get_country["Germany"]
TypeError: 'method' object is not subscriptable

हमारे कोड में एरर आती है।

समाधान

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

edam.get_country["Germany"]

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

इस एरर को हल करने के लिए, हमें स्क्वायर ब्रैकेट्स को पैरेंथेसिस से बदलना होगा:

edam.get_country("Germany")

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

Edam is not from Germany. It is from Netherlands.

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

edam.get_country("Netherlands")

हमारा कोड रिटर्न करता है:

Edam is from Netherlands.

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

निष्कर्ष

"TypeError: 'method' object is not subscriptable" एरर तब आती है जब आप क्लास के अंदर किसी मेथड को कॉल करने के लिए स्क्वायर ब्रैकेट्स का उपयोग करते हैं। इस एरर को हल करने के लिए, सुनिश्चित करें कि आप क्लास के मेथड्स को केवल पैरेंथेसिस का उपयोग करके कॉल करते हैं, उस मेथड के नाम के बाद जिसे आप कॉल करना चाहते हैं।

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

  1. TypeError: JavaScript में  undefined  ऑब्जेक्ट नहीं है TypeError: JavaScript में 'undefined' ऑब्जेक्ट नहीं है

    TypeError: undefined is not an object एरर तब होता है जब किसी अनडिफाइंड ऑब्जेक्ट पर प्रॉपर्टी एक्सेस की जाती है या मेथड कॉल किया जाता है। यह एरर केवल सफारी ब्राउज़र में दिखाया जाता है।JavaScript में TypeError - undefined is not an object एरर का कोड:उदाहरण<!DOCTYPE html> <html lang="hi&q

  1. - Python में cmp() विधि

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

  1. - Python में 'not in' ऑपरेटर क्या करता है?

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