以下用法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()引发TypeError,该错误由用户类不是新型类的事实来解释。但是,上面的类是一种新式的类,因为它继承自object
:
>>> isinstance(HTMLParser(), object)
True
我想念什么?我如何super()
在这里使用?
使用HTMLParser.__init__(self)
代替super(TextParser, self).__init__()
可以工作,但是我想了解TypeError。
PS:Joachim指出,成为一个新类实例并不等同于成为一个实例object
。我读了很多相反的书,因此感到困惑(基于object
实例测试的新型类实例测试的示例:https : //stackoverflow.com/revisions/2655651/3)。
super()
仅适用于新样式类(和对象)的工作原理是在HTML文档(提到docs.python.org/library/functions.html#super)。
super.__doc__
没有提及新旧样式!