पायथन क्लासेस को उनके मेथड्स तक पहुंचने से पहले इंस्टेंटिएट किया जाना चाहिए, या कॉल किया जाना चाहिए। यदि आप किसी क्लास के ऑब्जेक्ट को इंस्टेंटिएट करना भूल जाते हैं और क्लास मेथड तक पहुंचने का प्रयास करते हैं, तो आपको "missing 1 required positional argument: 'self'" कहते हुए एक त्रुटि का सामना करना पड़ता है।
इस गाइड में, हम बात करते हैं कि इस त्रुटि का क्या अर्थ है और यह क्यों उठाई जाती है। हम इस त्रुटि के एक उदाहरण को एक्शन में देखते हैं ताकि आप सीख सकें कि इसे कैसे ठीक किया जाए।
missing 1 required positional argument: 'self'
पोजिशनल आर्गुमेंट्स उस डेटा को संदर्भित करते हैं जिसे फ़ंक्शन में पास किया जाता है। एक क्लास में, हर फ़ंक्शन को "self" मान दिया जाना चाहिए। "self" का मान जावास्क्रिप्ट में "this" के समान है। "self" क्लास के ऑब्जेक्ट में संग्रहीत डेटा को दर्शाता है।
जब आप पहले उस क्लास के ऑब्जेक्ट को इंस्टेंटिएट किए बिना क्लास मेथड को कॉल करते हैं, तो आपको त्रुटि मिलती है। ऐसा इसलिए है क्योंकि "self" का कोई मान नहीं होता जब तक कोई ऑब्जेक्ट इंस्टेंटिएट नहीं किया गया हो।
सबसे आम गलतियां जो "missing 1 required positional argument: 'self'" त्रुटि का कारण बनती हैं वे हैं:
- किसी क्लास के ऑब्जेक्ट को इंस्टेंटिएट करना भूल जाना
- क्लास को इंस्टेंटिएट करने के लिए गलत सिंटैक्स का उपयोग करना
आइए इनमें से प्रत्येक कारण को व्यक्तिगत रूप से देखते हैं।
कारण #1: ऑब्जेक्ट को इंस्टेंटिएट करना भूल जाना
किसी क्लास में मेथड तक पहुंचने से पहले एक ऑब्जेक्ट को इंस्टेंटिएट किया जाना चाहिए।
एक क्लास परिभाषित करें जो वीडियो गेम में हीरो के बारे में जानकारी संग्रहीत करता है:
class Hero:
def __init__(self, name, player_type):
self.name = name
self.player_type = player_type
अगला, हम अपने क्लास में एक फ़ंक्शन जोड़ते हैं। क्लास के अंदर फ़ंक्शन्स को मेथड्स कहा जाता है। यह मेथड खिलाड़ी का नाम और उनका प्लेयर टाइप प्रिंट करता है:
def show_player(self):
print("Player Name: " + self.name)
print("Player Type: " + self.player_type)
हमारे क्लास तक पहुंचने का प्रयास करें ताकि हम एक खिलाड़ी बना सकें:
luke = Hero.show_player()
हमने एक ऑब्जेक्ट बनाया है जिसे "luke" वेरिएबल को असाइन किया गया है। यह ऑब्जेक्ट Hero क्लास से व्युत्पन्न है। हम खिलाड़ी के बारे में जानकारी दिखाने के लिए show_player() मेथड को कॉल करते हैं।
आइए अपना कोड पूरी तरह से चलाते हैं और देखते हैं क्या होता है:
Traceback (most recent call last): File "main.py", line 10, inluke = Hero.show_player() TypeError: show_player() missing 1 required positional argument: 'self'
हमारा कोड विफल होता है। ऐसा इसलिए है क्योंकि हमने Hero का ऑब्जेक्ट इंस्टेंटिएट नहीं किया है। Hero.show_player() काम नहीं करता क्योंकि हमने कोई हीरो नहीं बनाया है जिसकी जानकारी प्रदर्शित की जा सके।
इस त्रुटि को हल करने के लिए, हम पहले show_player() कॉल करने से पहले एक ऑब्जेक्ट इंस्टेंटिएट करते हैं:
luke = Hero("Luke", "Mage")
luke.show_player()
हमारा कोड फिर से चलाएं:
Player Name: Luke Player Type: Mage
हमारा कोड सफलतापूर्वक चलता है! हमने पहले "luke" नामक एक वेरिएबल घोषित किया है जो Luke नामक खिलाड़ी के बारे में जानकारी संग्रहीत करता है। Luke का प्लेयर टाइप "Mage" है। अब हमने उस ऑब्जेक्ट को इंस्टेंटिएट कर लिया है, हम show_player() मेथड को कॉल कर सकते हैं।
कारण #2: गलत तरीके से क्लास इंस्टेंटिएट करना
"missing 1 required positional argument: 'self'" त्रुटि तब हो सकती है जब आप क्लास को गलत तरीके से इंस्टेंटिएट करते हैं। निम्न कोड पर विचार करें:
luke = Hero luke.show_player()
जबकि यह कोड पिछले उदाहरण से हमारे समाधान के समान है, यह गलत है। ऐसा इसलिए है क्योंकि हमने Hero शब्द के बाद कोई पैरेंथेसिस नहीं जोड़ा है। इन पैरेंथेसिस को न होने से, हमारा प्रोग्राम नहीं जानता कि हम क्लास इंस्टेंटिएट करना चाहते हैं।
इस समस्या को Hero के बाद पैरेंथेसिस जोड़कर और आवश्यक आर्गुमेंट्स, "name" और "player_type" निर्दिष्ट करके हल करें:
luke = Hero("Luke", "Mage")
luke.show_player()
हमारा कोड अब सफलतापूर्वक चलता है और हमारे खिलाड़ी के बारे में जानकारी लौटाता है:
Player Name: Luke Player Type: Mage
निष्कर्ष
"missing 1 required positional argument: 'self'" त्रुटि तब उठाई जाती है जब आप क्लास मेथड को कॉल करने से पहले क्लास के ऑब्जेक्ट को इंस्टेंटिएट नहीं करते। यह त्रुटि तब भी उठाई जाती है जब आप क्लास को गलत तरीके से इंस्टेंटिएट करते हैं।
इस त्रुटि को हल करने के लिए, सुनिश्चित करें कि आप पहले क्लास के ऑब्जेक्ट को इंस्टेंटिएट करते हैं इससे पहले कि आप उस क्लास के किसी भी मेथड तक पहुंचने का प्रयास करें। फिर, जांचें कि आप ऑब्जेक्ट इंस्टेंटिएट करने के लिए सही सिंटैक्स का उपयोग करते हैं।
अब आप इस सामान्य त्रुटि को एक विशेषज्ञ पायथन डेवलपर की तरह हल करने के लिए तैयार हैं!