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 object
test 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!