पायथन मॉड्यूल भ्रमित कर रहे हैं, खासकर जब आप अपना खुद का परिभाषित करते हैं। "टाइप एरर:'मॉड्यूल' ऑब्जेक्ट कॉल करने योग्य नहीं है" सबसे आम गलतियों में से एक है जो पायथन डेवलपर्स कक्षाओं के साथ काम करते समय करते हैं।
इस गाइड में, हम इस बारे में बात करते हैं कि इस त्रुटि का क्या अर्थ है और इसे क्यों उठाया जाता है। इस त्रुटि को दूर करने में आपकी सहायता के लिए हम एक उदाहरण कोड स्निपेट के माध्यम से चलते हैं। चलिए शुरू करते हैं!
समस्या:लेखन त्रुटि:'मॉड्यूल' ऑब्जेक्ट कॉल करने योग्य नहीं है
कोई भी पायथन फ़ाइल एक मॉड्यूल है जब तक कि वह एक्सटेंशन ".py" में समाप्त होता है।
मॉड्यूल पायथन का एक महत्वपूर्ण हिस्सा हैं क्योंकि वे आपको मुख्य कार्यक्रम के बाहर कार्यों, चर और कक्षाओं को परिभाषित करने देते हैं। इसका मतलब है कि आप अपने कोड को कई फाइलों में विभाजित कर सकते हैं और इसे अधिक प्रभावी ढंग से वर्गीकृत कर सकते हैं।
मॉड्यूल को एक निश्चित तरीके से आयात किया जाना चाहिए। अन्यथा, पायथन एक त्रुटि देता है:
लेखन त्रुटि:'मॉड्यूल' वस्तु प्रतिदेय नहीं है
ऐसा तब होता है जब आप किसी मॉड्यूल को फ़ंक्शन के रूप में आयात करने का प्रयास करते हैं।
एक उदाहरण परिदृश्य
"केक" नामक मॉड्यूल को परिभाषित करें। इस मॉड्यूल में एक फ़ंक्शन है:read_file. read_file फ़ंक्शन टेक्स्ट फ़ाइल की सामग्री को पढ़ेगा।
हमारा फ़ाइल नाम हमारे मॉड्यूल का नाम निर्धारित करता है। क्योंकि हम चाहते हैं कि हमारे मॉड्यूल को "केक" कहा जाए, हम अपने कोड को Cakes.py नामक फ़ाइल में लिखते हैं:
81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।
बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।
def read_file():all_cakes =[] open("cakes.txt", "r") के साथ Cake_file के रूप में:Cake_list =Cake_file.readlines() केक_सूची में c के लिए:all_cakes.append(c.replace("\ n", "")) सभी_केक लौटाएं
यह फ़ंक्शन "केक.txt" नामक फ़ाइल की सामग्री को पढ़ता है। यह तब फ़ाइल में पाठ की प्रत्येक पंक्ति के माध्यम से पुनरावृत्त होता है और प्रत्येक पंक्ति को "all_cakes" नामक सूची में जोड़ता है।
किसी भी नई लाइन ("\n") वर्णों को रिक्त मान से बदलने के लिए प्रतिस्थापन () विधि का उपयोग किया जाता है। यह सभी नई लाइनों को हटा देता है। हम अपने फ़ंक्शन के अंत में "all_cakes" लौटाते हैं।
अब, app.py नाम की एक फाइल खोलें और इस कोड में पेस्ट करें:
<पूर्व>आयात केककेक_सूची =केक () प्रिंट (केक_सूची)
यह कोड "केक.txt" फ़ाइल की सामग्री को पढ़ने के लिए हमारे "केक" मॉड्यूल का उपयोग करता है। यह तब सभी केक को प्रिंट करता है जो फ़ंक्शन को फ़ाइल में मिला है।
चलिए अपना कोड चलाते हैं:
ट्रेसबैक (सबसे हालिया कॉल अंतिम):फ़ाइल "main.py", पंक्ति 3, <मॉड्यूल> केक =केक में () लेखन त्रुटि:'मॉड्यूल' ऑब्जेक्ट कॉल करने योग्य नहीं है
हमारा कोड एक त्रुटि देता है।
समाधान
आइए हमारी app.py फ़ाइल में आयात विवरण देखें:
हम मॉड्यूल "केक" आयात करते हैं। इसमें वे सभी चर, वर्ग और कार्य शामिल हैं जिन्हें हम "केक.पी" फ़ाइल में घोषित करते हैं।
अब, हमारे कोड की अगली पंक्ति पर नजर डालते हैं:
केक_लिस्ट =केक ()
हालांकि "केक" मॉड्यूल में केवल एक फ़ंक्शन होता है, हम यह निर्दिष्ट नहीं करते कि वह फ़ंक्शन क्या है। यह पायथन को भ्रमित करता है क्योंकि यह नहीं जानता कि इसे किस फ़ंक्शन के साथ काम करना चाहिए।
इस त्रुटि को हल करने के लिए, हम मॉड्यूल के बजाय उस फ़ंक्शन का नाम कहते हैं जिसे हम संदर्भित करना चाहते हैं:
<पूर्व>केककेक_सूची आयात करें =केक.read_file()प्रिंट(केक_सूची)
आइए अपना कोड फिर से चलाने का प्रयास करें:
['दालचीनी बाबका', 'चॉकलेट कपकेक']
हमारा कोड सफलतापूर्वक केक की सूची लौटाता है।
हमारी app.py फ़ाइल में, हम Cakes.read_file() को कॉल करते हैं।
पायथन फ़ाइल "केक.पी" को देखता है जहां हमारा "केक" मॉड्यूल संग्रहीत होता है और read_file()
का पता लगाता है समारोह। फिर, पायथन उस फ़ंक्शन को निष्पादित करता है।
हम read_file()
. का परिणाम असाइन करते हैं "केक_लिस्ट" नामक एक चर के लिए कार्य। फिर, हम उस सूची को कंसोल पर प्रिंट करते हैं।
वैकल्पिक रूप से, read_file फ़ंक्शन को सीधे हमारे प्रोग्राम में आयात करें:
केक से आयात करें read_filecake_list =read_file()print(cake_list)
हमारा कोड लौटाता है:
['दालचीनी बाबका', 'चॉकलेट कपकेक']
हमारा कोड read_file()
. को निष्पादित करता है "केक" मॉड्यूल से कार्य करें। इस उदाहरण में, हम संपूर्ण "केक" मॉड्यूल आयात करते हैं। ऐसा करने के बजाय, हम "केक" मॉड्यूल से एक फ़ंक्शन आयात करते हैं:read_file.
ध्यान दें कि जब हम read_file आयात करते हैं, तो हमें cakes.read_file()
का उपयोग करने की आवश्यकता नहीं रह जाती है हमारे फ़ंक्शन को कॉल करने के लिए। हम read_file()
. का उपयोग करते हैं क्योंकि हम आयात करते हैं read_file()
सीधे हमारे कोड में काम करता है।
निष्कर्ष
पायथन मॉड्यूल के लिए कोड एक अलग फाइल में मौजूद है। मॉड्यूल से फ़ंक्शंस और मान आयात करने के कुछ अलग तरीके हैं और गड़बड़ करना आसान है।
जब आप मॉड्यूल के साथ काम करते हैं, तो सुनिश्चित करें कि आप उन कार्यों, कक्षाओं और चरों का संदर्भ देते हैं जिन्हें आप सही तरीके से एक्सेस करना चाहते हैं। यदि आप मॉड्यूल को कॉल करने के बजाय किसी फ़ंक्शन को संदर्भित करना चाहते हैं, तो आपको उस सटीक फ़ंक्शन को निर्दिष्ट करने की आवश्यकता है जिसे आप मॉड्यूल से कॉल करना चाहते हैं।
अब आप एक पेशेवर डेवलपर की तरह इस Python TypeError को हल करने के लिए तैयार हैं!