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 object
Instanztest: 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!