super() вызывает «TypeError: должен быть тип, а не classobj» для класса нового стиля.

Следующее использование 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: Йоахим указал, что экземпляр класса нового стиля не эквивалентен объекту. много раз читал обратное, отсюда и мое замешательство (пример теста экземпляра класса в новом стиле, основанного на тесте экземпляра объекта : https://stackoverflow.com/revisions/2655651/3) .

331
задан Community 23 May 2017 в 00:31
поделиться