Il seguente utilizzo di super()
genera un TypeError: perché?
>>> da HTMLParser importa HTMLParser >>> class TextParser(HTMLParser): ... def __init__(self): ... super(TextParser, self).__init__() ... self.all_data = [] ... >>> TextParser() (...) TypeError: deve essere di tipo, non classobj
C'è una domanda simile su StackOverflow: Python super() genera TypeError, dove l'errore è spiegato dal fatto che la classe utente non è una classe di nuovo stile. Tuttavia, la classe sopra è una classe di nuovo stile, 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__()
funzionerebbe, ma vorrei capire il TypeError.
PS: Joachim ha sottolineato che essere un'istanza di classe new-style non equivale a essere un oggetto . Ho letto il contrario molte volte, da qui la mia confusione (esempio di test di istanza di classe di nuovo stile basato su test di istanza
object
: https://stackoverflow.com/revisions/2655651/3).