Il seguente uso di super()genera un TypeError: perché?
>>> from HTMLParser import HTMLParser
>>> class TextParser(HTMLParser):
... def __init__(self):
... super(TextParser, self).__init__()
... self.all_data = []
...
>>> TextParser()
(...)
TypeError: must be type, not classobj
C'è una domanda simile su StackOverflow: Python super () genera TypeError , dove l'errore è spiegato dal fatto che la classe utente non è una nuova classe. Tuttavia, la classe sopra è una nuova classe, poiché eredita da object:
>>> isinstance(HTMLParser(), object)
True
Cosa mi sto perdendo? Come posso usare super()qui?
Usando HTMLParser.__init__(self)invece di super(TextParser, self).__init__()avrebbe funzionato, ma vorrei capire TypeError.
PS: Joachim ha sottolineato che essere un'istanza di nuova classe non equivale ad essere un object. Ho letto il contrario molte volte, quindi la mia confusione (esempio di test di istanza di classe di nuovo stile basato sul objecttest di istanza: https://stackoverflow.com/revisions/2655651/3 ).
super()funziona solo per le classi (e gli oggetti) di nuovo stile è menzionato nel documento HTML ( docs.python.org/library/functions.html#super ).
super.__doc__non menzionino nulla del vecchio e del nuovo stile!