हमारे पास निम्न कोड है जो 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 एक डायनामिक भाषा है।