Наступне використання 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__
нічого не згадує про старий та новий стиль!