एट्रिब्यूट्स किसी ऑब्जेक्ट, डेटा प्रकार, या क्लास से जुड़े मान या फ़ंक्शन होते हैं। यदि आप किसी ऐसे मान पर एट्रिब्यूट कॉल करते हैं जिसका डेटा प्रकार या क्लास उस एट्रिब्यूट का समर्थन नहीं करता, तो आपको AttributeError का सामना करना पड़ेगा।
यह गाइड चर्चा करता है कि Python AttributeError क्या है और इसका क्या अर्थ है। हम AttributeError का एक उदाहरण देखेंगे ताकि आप सीख सकें कि इसे अपने कोड में कैसे ठीक किया जाए।
Python AttributeError क्या है?
Python AttributeError तब उत्पन्न होता है जब आप किसी ऑब्जेक्ट के एट्रिब्यूट को कॉल करने का प्रयास करते हैं जिसका प्रकार उस मेथड का समर्थन नहीं करता। उदाहरण के लिए, स्ट्रिंग पर Python append() मेथड का उपयोग करने का प्रयास AttributeError लौटाता है क्योंकि स्ट्रिंग्स append() का समर्थन नहीं करतीं।
Python क्लास में, आप मेथड्स और मानों को परिभाषित कर सकते हैं जो उस क्लास के ऑब्जेक्ट्स द्वारा साझा किए जाते हैं। यही कारण है कि कुछ लोग क्लासेस को ऑब्जेक्ट्स के लिए ब्लूप्रिंट मानते हैं।
किसी मेथड या क्लास को कॉल करना उस क्लास के एट्रिब्यूट को संदर्भित करने का दूसरा तरीका है। एट्रिब्यूट के बारे में सोचने का एक तरीका व्यक्ति की शारीरिक विशेषता की तरह है। कुछ लोगों की नीली आंखें होती हैं। कुछ लोगों के गुलाबी रंग के बाल होते हैं। ये सभी एट्रिब्यूट्स हैं।
Python क्लास में, एक एट्रिब्यूट "eye_color" हो सकता है। यह एट्रिब्यूट व्यक्ति की आंखों का रंग परिभाषित कर सकता है। एक एट्रिब्यूट फ़ंक्शन भी हो सकता है। changeEyeColor() नामक फ़ंक्शन "eye_color" का मान बदल सकता है।
डेटा प्रकारों में एट्रिब्यूट्स होते हैं। उदाहरण के लिए, आप स्ट्रिंग को सूची में बदलने के लिए Python join() मेथड का उपयोग कर सकते हैं। स्ट्रिंग ऑब्जेक्ट्स join() मेथड का समर्थन करते हैं।
यदि आप किसी क्लास ऑब्जेक्ट या डेटा प्रकार से जुड़े फ़ंक्शन या मान को संदर्भित करने का प्रयास करते हैं, तो आपको AttributeError का सामना करना पड़ेगा।
Attribute Error Python उदाहरण
आइए एक प्रोग्राम लिखें जो जूतों की दो सूचियों को मर्ज करता है। दो जूता स्टोर विलय से गुजर रहे हैं और उन सभी अद्वितीय जूतों की सूची बनाना चाहते हैं जो वे बेचते हैं।
शुरू करने के लिए, आइए एक Python सेट परिभाषित करें जिसमें हैरिसन शूज़ (Harrisons Shoes) स्टोर के जूते हों:
harrisons_shoes = {"Nike Air Force 1 07", "Nike Air Max Plus", "Adidas Gazelle"}
हम अपने सेट को परिभाषित करने के लिए घुंघराले कोष्ठक का उपयोग करते हैं। अगला, आइए उस स्टोर के जूतों के नामों के साथ एक सेट परिभाषित करें जो हैरिसन के साथ विलय कर रहा है। यह जूता स्टोर शू एम्पोरियम (Shoe Emporium) कहलाता है:
shoe_emporium = {"Adidas Samba", "Adidas Superstar", "Nike Air Max Plus"}
क्योंकि ये दोनों संग्रह सेट्स हैं, वे केवल अद्वितीय मान संग्रहीत कर सकते हैं। इसका मतलब है कि जब हम उन्हें एक साथ जोड़ते हैं, तो हमें बिना डुप्लिकेट मानों वाला सेट मिलेगा।
अपने सेट्स को एक साथ जोड़ने के लिए, हम extend() नामक बिल्ट-इन फ़ंक्शन का उपयोग करने जा रहे हैं:
harrisons_shoes.extend(shoe_emporium) print(harrisons_shoes)
extend() मेथड "shoe_emporium" सेट से सभी जूतों को "harrisons_shoes" सेट में जोड़ता है। हम Python print() स्टेटमेंट का उपयोग करते हैं। यह हमें हमारे नए सेट में सभी जूते देखने देता है। आइए अपना कोड चलाएं और देखें क्या होता है:
Traceback (most recent call last): File "main.py", line 3, inharrisons_shoes.extend(shoe_emporium) AttributeError: 'set' object has no attribute 'extend'
हमारा कोड AttributeError लौटाता है।
AttributeError Python समाधान
हमारा त्रुटि संदेश हमें बताता है कि हम उस ऑब्जेक्ट पर extend() मेथड का उपयोग नहीं कर सकते जिसका डेटा प्रकार सेट है। ऐसा इसलिए है क्योंकि extend() एक सूची मेथड है। यह सेट्स द्वारा समर्थित नहीं है।
यदि हम अपने दो सेट्स को मर्ज करना चाहते हैं, तो हमें एडिशन साइन का उपयोग करना होगा:
harrisons_shoes.update(shoe_emporium) print(harrisons_shoes)
यह "shoe_emporium" सेट की सामग्री को "harrisons_shoes" सेट में जोड़ देगा। फिर हम कंसोल पर "harrisons_shoes" सेट में सभी मान प्रिंट करते हैं। आइए अपना नया प्रोग्राम चलाएं:
{'Nike Air Force 1 07', 'Adidas Superstar', 'Adidas Samba', 'Nike Air Max Plus', 'Adidas Gazelle'}
हमारा प्रोग्राम हमारे दो मूल सेट्स के सभी जूतों के साथ एक सेट लौटाता है। जबकि हमारे मूल दो सेट्स में छह मान थे, अब केवल पांच हैं। ऐसा इसलिए है क्योंकि दो जूते समान थे और सेट्स केवल अद्वितीय मान संग्रहीत कर सकते हैं।
हमारा प्रोग्राम हमारे दो मूल सेट्स के सभी जूतों के साथ एक सेट लौटाता है। जबकि हमारे मूल दो सेट्स में छह मान थे, अब केवल पांच हैं। ऐसा इसलिए है क्योंकि दो जूते समान थे और सेट्स केवल अद्वितीय मान संग्रहीत कर सकते हैं।
अन्वेषण के लिए समान AttributeErrors
AttributeErrors अविश्वसनीय रूप से आम हैं। वे तब उत्पन्न हो सकते हैं जब आप उन डेटा प्रकारों और क्लासेस के एट्रिब्यूट्स को कॉल करने का प्रयास करते हैं जो आपके द्वारा संदर्भित एट्रिब्यूट का समर्थन नहीं करते।
ये त्रुटियां तब भी हो सकती हैं जब आप किसी एट्रिब्यूट को संदर्भित करते समय टाइपो करते हैं। Python आपके कोड को जैसा है वैसा ही इंटरप्रेट करेगा। यदि आप टाइपो करते हैं, तो Python को ऐसा प्रतीत होगा कि आप किसी ऐसे एट्रिब्यूट को संदर्भित कर रहे हैं जो मौजूद नहीं है।
उदाहरण के लिए, सूची को विभाजित करने के लिए Python split() मेथड का उपयोग करना आम है। लेकिन, split() एक स्ट्रिंग मेथड है और इसलिए इसका उपयोग सूची को विभाजित करने के लिए नहीं किया जा सकता।
आगे पढ़ने के लिए, निम्नलिखित त्रुटियों पर शोध करने पर विचार करें:
- AttributeError: 'list' object has no attribute 'split'
- AttributeError: 'module' object has no attribute 'urlopen'
निष्कर्ष
Python में एट्रिब्यूट त्रुटियां तब उत्पन्न होती हैं जब किसी अमान्य एट्रिब्यूट को संदर्भित किया जाता है। इन त्रुटियों को हल करने के लिए, पहले जांचें कि आप जिस एट्रिब्यूट को कॉल कर रहे हैं वह मौजूद है या नहीं। फिर, सुनिश्चित करें कि एट्रिब्यूट उस ऑब्जेक्ट या डेटा प्रकार से संबंधित है जिसके साथ आप काम कर रहे हैं।
यदि आप जिस एट्रिब्यूट को चाहते हैं वह बिल्ट-इन प्रकार से जुड़ा हुआ है और मौजूद नहीं है, तो आपको विकल्प तलाशना चाहिए। कई एट्रिब्यूट्स के विकल्प मौजूद हैं जो एक डेटा प्रकार के लिए मौजूद हैं जिनका उपयोग आप दूसरे डेटा प्रकार पर कर सकते हैं। उदाहरण के लिए, सेट्स के साथ कोई extend() मेथड नहीं है लेकिन आप दो सेट्स को जोड़ने के लिए union() का उपयोग कर सकते हैं।
Python कोड लिखने के बारे में अधिक जानने के लिए, हमारा How to Learn Python गाइड पढ़ें।