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 object
testu 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!