super()
TypeError का निम्न उपयोग : क्यों?
>>> from HTMLParser import HTMLParser
>>> class TextParser(HTMLParser):
... def __init__(self):
... super(TextParser, self).__init__()
... self.all_data = []
...
>>> TextParser()
(...)
TypeError: must be type, not classobj
StackOverflow पर एक समान प्रश्न है: Python super () TypeError को उठाता है , जहाँ त्रुटि को इस तथ्य से समझाया जाता है कि उपयोगकर्ता वर्ग एक नई शैली का वर्ग नहीं है। हालाँकि, ऊपर का वर्ग एक नई शैली का वर्ग है, क्योंकि यह इनसे विरासत में मिला है object
:
>>> isinstance(HTMLParser(), object)
True
मैं क्या खो रहा हूँ? मैं super()
यहां कैसे उपयोग कर सकता हूं ?
काम HTMLParser.__init__(self)
करने के बजाय का उपयोग करना super(TextParser, self).__init__()
, लेकिन मैं TypeError को समझना चाहूंगा।
पुनश्च: जोआचिम ने बताया कि एक नई शैली की श्रेणी का उदाहरण होना एक होने के बराबर नहीं है object
। मैंने कई बार विपरीत पढ़ा, इसलिए मेरा भ्रम (उदाहरण के परीक्षण के आधार पर नई शैली के वर्ग उदाहरण परीक्षण का object
उदाहरण: https://stackoverflow.com/revisions/2655651/3 )।
super()
केवल नई-शैली की कक्षाओं (और वस्तुओं) के लिए काम करता है, वह HTML doc ( docs.python.org/library/functions.html#super ) में उल्लिखित है ।
super.__doc__
पुराने बनाम नई शैली के बारे में कुछ भी उल्लेख नहीं करता है!