किसी को इस साइट पर यह वही समस्या थी, लेकिन उत्तर उस हिस्से से संबंधित नहीं था जिसमें मुझे परेशानी है।
विरासत - विधिविरासत की समस्याएं। - पायथन
निम्न श्रेणी परिभाषाओं पर विचार करें।
class C1(object):
def f(self):
return 2*self.g()
def g(self):
return 2
class C2(C1):
def f(self):
return 3*self.g()
class C3(C1):
def g(self):
return 5
class C4(C3):
def f(self):
return 7*self.g()
obj1 = C1()
obj2 = C2()
obj3 = C3()
obj4 = C4()
इस समस्या पर विचार करने के जो तरीकों जब
f
विधि कहा जाता है कहा जाता है आप कर रहे हैं के लिए
। तो उदाहरण के लिए, जब obj1.f()
कहा जाता है, f
C1
की विधि को कॉल किया जाता है जिसे C1
की g
विधि कहा जाता है। यह फार्म
['C1.f', 'C1.g']
लिखें तीन असाइनमेंट बयान है कि क्रमश: चर obj2_calls
को obj2.f()
के लिए 'को कॉल सूची' प्रदान करती है की एक 'बुला सूची' के रूप में प्रतिनिधित्व किया जा सकता है, के लिए obj3.f()
के लिए 'को कॉल सूची' प्रदान करती है परिवर्तनीय obj3_calls
और वेरिएबल obj4_calls
पर obj4.f()
के लिए 'कॉलिंग सूची' असाइन करता है।
मैं पहला काम को समझने कोई समस्या नहीं है, यह obj2_calls = ['C2.f', 'C1.g']
है है, लेकिन मैं अगले एक पता लगाने की कोशिश मेरी दिमाग wracking कर रहा हूँ। मैंने सोचा कि चूंकि C3.f
नहीं है कि सूची ['C1.f']
होगी लेकिन दुर्भाग्य से यह नहीं है।
बस स्पष्ट करने के लिए, इस होमवर्क
वास्तव में क्या चल रहा है यह जानने के लिए प्रत्येक फ़ंक्शन में कुछ 'प्रिंट' कथन जोड़ें। –
यदि आप C3.f में टाइप करते हैं तो आपको c3.f दिखाई देगा जिसका अर्थ है कि इसका वर्ग C3 –
Greg
का हिस्सा है हाय लोग बहुत उपयोगी हैं, प्रिंट का उपयोग करके मेरे पास सही उत्तर है। लेकिन मैंने कोड को समझने के लिए इसे पाने के लिए और अधिक सामान्य ज्ञान का उपयोग किया। मैं अभी भी समझना चाहता हूं कि उत्तर obj3_calls = ['C1.f', 'C3.g'] क्यों था।मुझे नहीं लगता कि 'c1.g' को 'c1.f' –