【发布时间】:2012-03-30 17:08:59
【问题描述】:
super() 的以下使用引发了 TypeError:为什么?
>>> from HTMLParser import HTMLParser
>>> class TextParser(HTMLParser):
... def __init__(self):
... super(TextParser, self).__init__()
... self.all_data = []
...
>>> TextParser()
(...)
TypeError: must be type, not classobj
StackOverflow 上有一个类似的问题:Python super() raises TypeError,其中错误的原因是用户类不是新式类。但是,上面的类是一个新式类,因为它继承自object:
>>> isinstance(HTMLParser(), object)
True
我错过了什么?我如何在这里使用super()?
使用 HTMLParser.__init__(self) 而不是 super(TextParser, self).__init__() 会起作用,但我想了解 TypeError。
PS:Joachim 指出,作为一个 new-style-class 实例并不等同于作为一个object。我多次阅读相反的内容,因此感到困惑(基于object实例测试的新型类实例测试示例:https://stackoverflow.com/revisions/2655651/3)。
【问题讨论】:
-
感谢您的提问和回答。我想知道为什么 2.7 的
super.__doc__没有提到任何关于新旧风格的内容! -
谢谢。 :) 与文档的完整 HTML 版本相比,文档字符串包含的信息通常更少。 HTML 文档 (docs.python.org/library/functions.html#super) 中提到了
super()仅适用于新型类(和对象)这一事实。 -
这不是重复的(请参阅更新的问题和接受的答案)。
标签: python superclass super typeerror