जब मैंने कुछ टूल जेनरेट किए गए वर्गों को बढ़ाया, तो मुझे एहसास नहीं हुआ कि जब तक मैं सुपर() का उपयोग करने की कोशिश नहीं करता तब तक वे पुरानी स्टाइल कक्षाएं नहीं हैं। सुपर() पुरानी शैली वर्गों के साथ काम नहीं करता है, तो मैं यह त्रुटि आई:क्या पुरानी और नई शैली कक्षाओं को विस्तारित करना ठीक है?
TypeError: super() argument 1 must be type, not classobj
जैसे, इस स्निपेट का प्रयास करें:
>>> class A:
... def greet(self):
... print "A says hi"
...
>>> class B(A):
... def greet(self):
... print "B says hi"
...
>>> super(B, B()).greet()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: super() argument 1 must be type, not classobj
मैं सिर्फ उत्सुक क्या हुआ अगर मैं बी बढ़ा हुआ होता था ऑब्जेक्ट से और इसे एक नई स्टाइल क्लास बनाने के लिए, और यह सुपर() काम करना प्रतीत होता था।
>>> class B(A, object):
... def greet(self):
... print "B says hi"
...
>>> super(B, B()).greet()
A says hi
क्या यह एक उचित कामकाज है या क्या मेरे पास कुछ अवांछित परिणाम होंगे?
आप 'कक्षा ए' को' कक्षा ए (ऑब्जेक्ट) 'में क्यों नहीं बदल सकते हैं? मूल कारण को ठीक करने और सबकुछ नई शैली बनाने से आपको क्या रोक रहा है? आपको लगता है कि काम के आसपास एक फिक्स से बेहतर क्यों है? –
कारण यह है कि कक्षा ए उत्पन्न होता है (जैसा कि मैंने शुरुआत में उल्लेख किया है, मैं उपकरण उत्पन्न कक्षाओं का विस्तार कर रहा हूं)। अगर मैं यह परिवर्तन करता हूं, अगली बार जब मैं कक्षाओं को पुन: उत्पन्न करता हूं, तो वे ओवरराइट हो जाते हैं। – haridsv