El siguiente uso de super()
plantea un error de tipo: ¿por qué?
>>> from HTMLParser import HTMLParser
>>> class TextParser(HTMLParser):
... def __init__(self):
... super(TextParser, self).__init__()
... self.all_data = []
...
>>> TextParser()
(...)
TypeError: must be type, not classobj
Hay una pregunta similar en StackOverflow: Python super () plantea TypeError , donde el error se explica por el hecho de que la clase de usuario no es una clase de estilo nuevo. Sin embargo, la clase anterior es una clase de nuevo estilo, ya que hereda de object
:
>>> isinstance(HTMLParser(), object)
True
¿Qué me estoy perdiendo? ¿Cómo puedo usar super()
aquí?
Usar en HTMLParser.__init__(self)
lugar de super(TextParser, self).__init__()
funcionaría, pero me gustaría entender el TypeError.
PD: Joachim señaló que ser una instancia de clase de estilo nuevo no es equivalente a ser un object
. Leí lo contrario muchas veces, de ahí mi confusión (ejemplo de prueba de instancia de clase de nuevo estilo basada en object
prueba de instancia: https://stackoverflow.com/revisions/2655651/3 ).
super()
solo funciona para clases (y objetos) de estilo nuevo se menciona en el documento HTML ( docs.python.org/library/functions.html#super ).
super.__doc__
no menciona nada sobre el estilo antiguo frente al nuevo!