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

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method