Наступне використання 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/reitions/2655651/3 ).
super()працює лише для класів нового стилю (та об'єктів), згадується в документі HTML ( docs.python.org/library/functions.html#super ).
super.__doc__нічого не згадує про старий та новий стиль!