Python, C3 linearization से एक method resolution order निकालता है, जो हर class के अपने bases का क्रम बनाए रखता है और यह गारंटी देता है कि subclass अपने parents से पहले आए। Attribute lookup उसी लिस्ट पर चलता है और पहला मिलान ले लेता है। आप इसे mro method से देख सकते हैं, और super असली instance के MRO को फॉलो करता है, सिर्फ तुरंत ऊपर वाली parent class को नहीं।
इंटरव्यूअर यह क्यों पूछते हैं
Django और DRF में mixins हर जगह हैं, इसलिए इंटरव्यूअर जानना चाहते हैं कि आप बता सकते हैं कौन सा implementation जीतेगा और mixin के चुपचाप कुछ override कर देने पर उसे डीबग कर सकते हैं। असली संकेत यह समझना है कि super, parent का पर्यायवाची नहीं है; वह instance के MRO में अगली class है। यही गलतफहमी उन cooperative inheritance बग की जड़ है जिन पर लोग पूरी दोपहर गंवाते हैं।
अपना जवाब कैसे स्ट्रक्चर करें
- C3 linearization का नाम लें और उसकी गारंटी बताएं।
- कहें कि lookup उस क्रम में पहला मिलान लेता है।
- super की आम गलतफहमी सुधारें।
- बताएं कि व्यवहार में आप MRO कैसे देखते हैं।
उदाहरण जवाब
Python, class और उसके सारे ancestors का एक रैखिक क्रम C3 से बनाता है, फिर attribute lookup उस लिस्ट पर ऊपर से नीचे चलकर पहले मिलान पर रुक जाता है। C3 दो चीजों की गारंटी देता है: class हमेशा उन सबसे पहले आती है जिनसे वह inherit करती है, और आपने bases जिस क्रम में लिखे वह सापेक्ष क्रम बना रहता है। अगर ये दोनों शर्तें एक साथ पूरी न हो सकें, तो class की definition ही import के समय TypeError उठा देती है, जो अच्छी बात है क्योंकि पता runtime पर नहीं, तुरंत चल जाता है। जो हिस्सा मैं जरूर कहता हूं वह यह है कि super का मतलब parent नहीं है। इसका मतलब है instance के MRO में मौजूदा class के बाद वाली entry, इसीलिए super कॉल करने वाला mixin ऐसी sibling class पर पहुंच सकता है जिससे उसने कभी inherit नहीं किया। Django की class based views में cooperative multiple inheritance का पूरा आधार यही है। कुछ चौंकाने वाला होने पर मैं mro लिस्ट प्रिंट करता हूं, और जवाब आम तौर पर सेकंडों में साफ हो जाता है क्योंकि class स्टेटमेंट में mixin का क्रम उल्टा होता है।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- अगर C3 एक संगत क्रम न निकाल सके तो क्या होता है?
- Django के mixins base view class से पहले क्यों आते हैं?
- class method के अंदर super कैसे बर्ताव करता है?
Python डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें