L'utilisation suivante de super()
soulève une TypeError : pourquoi ?
>>> from HTMLParser import HTMLParser
>>> class TextParser(HTMLParser):
... def __init__(self):
... super(TextParser, self).__init__()
... self.all_data = []
...
>>> TextParser()
(...)
TypeError: must be type, not classobj
Il existe une question similaire sur StackOverflow : Python super() soulève TypeError où l'erreur s'explique par le fait que la classe utilisateur n'est pas une classe de type nouveau. Cependant, la classe ci-dessus est une classe de style nouveau, car elle hérite de object
:
>>> isinstance(HTMLParser(), object)
True
Qu'est-ce que je rate ? Comment puis-je utiliser super()
ici ?
Utilisation de HTMLParser.__init__(self)
au lieu de super(TextParser, self).__init__()
fonctionnerait, mais j'aimerais comprendre le TypeError.
PS : Joachim a fait remarquer que le fait d'être une instance de classe de nouveau style n'est pas équivalent au fait d'être une instance de classe de nouveau style. object
. J'ai lu le contraire plusieurs fois, d'où ma confusion (exemple de test d'instance de classe nouveau style basé sur object
test d'instance : https://stackoverflow.com/revisions/2655651/3 ).