Python的超级构造函数super调用

Python call super constructor

本问题已经有最佳答案,请猛点这里访问。

我正在使用模块htmlparser并希望生成一个子类。但是我不能调用超级构造函数,我做错了什么?

1
2
3
4
class CustomParser(HTMLParser):

def __init__(self):
    super(CustomParser, self).__init__()

Stacktrace:

1
2
3
4
5
6
7
8
Traceback (most recent call last):
File"C:\Users\Marc\Phyton
afafafaf\src\test.py"
, line 20, in <module>
C = CustomParser()
File"C:\Users\Marc\Phyton
afafafaf\src\test.py"
, line 17, in __init__
super(CustomParser, self).__init__()
TypeError: must be type, not classobj


正如错误消息所说,HTMLParser是一个旧式类(classobj类型),因此不支持协作super()调用。从子类调用父类方法的正确方法是直接类访问,即:

1
2
3
class CustomParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)

试试这个:

1
2
3
class CustomParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)

或者:

1
2
3
class CustomParser(HTMLParser, object):
    def __init__(self):
        super(CustomParser, self).__init__(self)

细节:https://stackoverflow.com/a/9719731/320104