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

Python क्लासेस के बीच सर्कुलर डिपेंडेंसी कैसे संभालें?

हमारे पास निम्न कोड है जो Python क्लासेस के बीच सर्कुलर डिपेंडेंसी दिखाता है।

class P():
    q = Q().do_something()
    def do_something(self):
        pass

class Q():
    p = P().do_something()
    def do_something(self):
        pass

क्लासेस के मामले में, फंक्शन के विपरीत, क्लास की बॉडी डेफिनिशन टाइम पर एक्ज़ीक्यूट होती है। क्लास P को डिफाइन करने के लिए, हमें वास्तव में Q मेथड को कॉल करना होगा, जो हम नहीं कर सकते क्योंकि क्लास Q अभी तक डिफाइन नहीं हुई है।

इससे निपटने के लिए, हम पहले क्लासेस डिफाइन कर सकते हैं और फिर बाद में प्रॉपर्टीज़ जोड़ सकते हैं:

class P(object):
    pass

class Q(object):
    pass

P.q = Q.do_something()
Q.p = P.do_something()

यदि प्रत्येक do_something कॉल दूसरे कॉल के पहले से एक्ज़ीक्यूट होने पर निर्भर करता है, तो यह काम नहीं करेगा। हमें समस्या को ठीक करने के लिए अभी और बदलाव करने की आवश्यकता है।

क्लासेस को ये समस्याएं होती हैं क्योंकि क्लास लेवल पर डायरेक्टिव्स (q = Q.do_something()) क्लास डिफाइन करते समय एक्ज़ीक्यूट होते हैं, न कि जब आप क्लास का इंस्टेंस बनाते हैं।

हम क्लास की डेफिनिशन को बाद में पूरा कर सकते हैं, दोनों क्लासेस डिफाइन होने के बाद। यह इस बात को साबित करता है कि Python एक डायनामिक भाषा है।

  1. - पायथन नेमस्पेस कैसे बनाएं?

    प्रत्येक पैकेज, मॉड्यूल, क्लास, फ़ंक्शन और मेथड फ़ंक्शन का एक नेमस्पेस होता है जिसमें वेरिएबल नेम रिज़ॉल्व होते हैं। जब कोई फ़ंक्शन, मॉड्यूल या पैकेज मूल्यांकन किया जाता है (यानी, निष्पादन शुरू होता है), तो एक नेमस्पेस बनाया जाता है। इसलिए यदि आप नेमस्पेस बनाना चाहते हैं, तो आपको बस एक फ़ंक्शन कॉल

  1. - पायथन में एक्सेप्शन कैसे हैंडल करें?

    पायथन में एक्सेप्शन हैंडल करने का सबसे सरल तरीका try-except ब्लॉक का उपयोग करना है। उदाहरण try: fob = open(test.txt, r) fob.write(This is my test file for exception handling!!) except IOError: print(Error: cant find the file or read data) else: print(Write operation is performed succ

  1. - पायथन में लूप के भीतर एक्सेप्शन कैसे हैंडल करें?

    हम कोड में एक्सेप्शन को निम्न प्रकार से फिर से लिखकर हैंडल कर सकते हैं: a = [] foo = redbullz try: for i in foo: a.append(i) print(a[8]) except Exception as e: print(e) हमें निम्न आउटपुट मिलता है: list index out of range Process finished with exit code 0