Следующее использование 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.
PS: Йоахим отметил, что быть экземпляром класса нового стиля не эквивалентно тому, чтобы быть object
. Я много раз читал противоположное, отсюда моя путаница (пример теста экземпляра класса нового стиля на основе object
теста экземпляра: https://stackoverflow.com/revisions/2655651/3 ).
super()
работает только для классов (и объектов) нового стиля, упоминается в документе HTML ( docs.python.org/library/functions.html#super ).
super.__doc__
ничего не говорится о старом и новом стиле!