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

हम पायथन कक्षाओं के बीच परिपत्र निर्भरता को कैसे संभालते हैं?


हमारे पास निम्न कोड है जो अजगर वर्गों के बीच परिपत्र निर्भरता को दर्शाता है।

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

कक्षाओं के मामले में, कार्यों के विपरीत, एक वर्ग के शरीर को परिभाषा समय पर निष्पादित किया जाता है। कक्षा पी को परिभाषित करने के लिए, हमें वास्तव में एक क्यू विधि को कॉल करने की आवश्यकता है, जो हम नहीं कर सकते क्योंकि कक्षा क्यू अभी तक परिभाषित नहीं है।

इस पर काम करने के लिए, हम कक्षाओं को परिभाषित कर सकते हैं और उसके बाद गुण जोड़ सकते हैं -

class P(object):
   pass
class Q(object):
   pass
P.q = Q.do_something()
Q.p = P.do_something()

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

कक्षाओं में ये समस्याएँ होती हैं क्योंकि कक्षा स्तर पर निर्देश (q =Q.do_something ()) कक्षा को परिभाषित करते समय निष्पादित होते हैं, न कि जब आप कक्षा का एक उदाहरण बनाते हैं

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


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

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

  1. पायथन में अपवाद कैसे संभालें?

    पायथन में अपवादों को संभालने का सबसे आसान तरीका कोशिश-छोड़कर ब्लॉक का उपयोग करना है। उदाहरण try: fob = open("test.txt", "r") fob.write("This is my test file for exception handling!!") except IOError: print "Error: can\'t find the file or read data" else: p

  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