super() solleva “TypeError: must be type, not classobj” per la classe di nuovo stile

| | | | | | | | | | | | | | | |

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).