L'utilisation suivante de super()
déclenche 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 y a une question similaire sur StackOverflow: Python super () déclenche TypeError , où l'erreur est expliquée par le fait que la classe utilisateur n'est pas une classe de nouveau style. Cependant, la classe ci-dessus est une classe de nouveau style, car elle hérite de object
:
>>> isinstance(HTMLParser(), object)
True
Qu'est-ce que je rate? Comment puis-je utiliser super()
, ici?
Utiliser HTMLParser.__init__(self)
au lieu de super(TextParser, self).__init__()
fonctionnerait, mais je voudrais comprendre le TypeError.
PS: Joachim a souligné qu'être une instance de classe de nouveau style n'est pas équivalent à être un object
. J'ai lu l'opposé plusieurs fois, d'où ma confusion (exemple de test d'instance de classe de nouveau style basé sur le object
test d'instance: https://stackoverflow.com/revisions/2655651/3 ).
super()
ne fonctionne que pour les classes (et les objets) de nouveau style est mentionné dans le document HTML ( docs.python.org/library/functions.html#super ).
super.__doc__
ne mentionne rien de l'ancien contre le nouveau style!