Die folgende Verwendung von super()löst einen TypeError aus: Warum?
>>> from HTMLParser import HTMLParser
>>> class TextParser(HTMLParser):
... def __init__(self):
... super(TextParser, self).__init__()
... self.all_data = []
...
>>> TextParser()
(...)
TypeError: must be type, not classobj
Bei StackOverflow gibt es eine ähnliche Frage: Python super () löst TypeError aus , wobei der Fehler durch die Tatsache erklärt wird, dass die Benutzerklasse keine Klasse neuen Stils ist. Die obige Klasse ist jedoch eine Klasse neuen Stils, da sie erbt von object:
>>> isinstance(HTMLParser(), object)
True
Was vermisse ich? Wie kann ich super()hier verwenden?
Verwenden HTMLParser.__init__(self)statt super(TextParser, self).__init__()würde funktionieren, aber ich würde gerne den TypeError verstehen.
PS: Joachim wies darauf hin, dass es nicht gleichbedeutend ist, eine Instanz einer Klasse neuen Stils zu sein object. Ich habe das Gegenteil oft gelesen, daher meine Verwirrung (Beispiel für einen neuen Klasseninstanztest basierend auf dem objectInstanztest: https://stackoverflow.com/revisions/2655651/3 ).
super()nur für Klassen (und Objekte) neuen Stils funktioniert, wird im HTML-Dokument ( docs.python.org/library/functions.html#super ) erwähnt.
super.__doc__nichts über alten oder neuen Stil erwähnt!