O seguinte uso de super()
gera um TypeError: 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
Há uma pergunta semelhante no StackOverflow: Python super () gera TypeError , onde o erro é explicado pelo fato de a classe de usuário não ser uma classe de novo estilo. No entanto, a classe acima é uma classe de novo estilo, pois herda de object
:
>>> isinstance(HTMLParser(), object)
True
o que estou perdendo? Como posso usar super()
aqui?
Usar em HTMLParser.__init__(self)
vez de super(TextParser, self).__init__()
funcionaria, mas eu gostaria de entender o TypeError.
PS: Joachim apontou que ser uma instância de nova classe de estilo não é equivalente a ser uma object
. Eu li o contrário várias vezes, daí a minha confusão (exemplo de teste de instância de classe de novo estilo com base no object
teste de instância: https://stackoverflow.com/revisions/2655651/3 ).
super()
funcionar apenas para classes (e objetos) de novo estilo é mencionado no documento HTML ( docs.python.org/library/functions.html#super ).
super.__doc__
não menciona nada sobre o antigo e o novo estilo!