Następujące użycie super()podnosi typ błędu: dlaczego?
>>> from HTMLParser import HTMLParser
>>> class TextParser(HTMLParser):
... def __init__(self):
... super(TextParser, self).__init__()
... self.all_data = []
...
>>> TextParser()
(...)
TypeError: must be type, not classobj
Podobne pytanie dotyczy StackOverflow: Python super () podnosi TypeError , gdzie błąd jest wyjaśniony przez fakt, że klasa użytkownika nie jest klasą nowego stylu. Jednak powyższa klasa jest klasą w nowym stylu, ponieważ dziedziczy po object:
>>> isinstance(HTMLParser(), object)
True
czego mi brakuje? Jak mogę użyć super()tutaj?
Używanie HTMLParser.__init__(self)zamiast super(TextParser, self).__init__()byłoby działało, ale chciałbym zrozumieć błąd TypeError.
PS: Joachim wskazał, że bycie instancją klasy nowego stylu nie jest równoznaczne z byciem an object. Wiele razy czytam przeciwieństwo, stąd moje zamieszanie (przykład testu instancji klasy w nowym stylu na podstawie objecttestu instancji: https://stackoverflow.com/revisions/2655651/3 ).
super()działa tylko w przypadku klas (i obiektów) w nowym stylu, jest wspomniany w dokumencie HTML ( docs.python.org/library/functions.html#super ).
super.__doc__nie wspomina o starym i nowym stylu!