Python调用超级构造函数

时间:2015-09-04 11:48:36

标签: python constructor super

我正在使用模块HTMLParser并想要创建一个子类。但我无法调用超级构造函数,我做错了什么?

class CustomParser(HTMLParser):

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

堆栈跟踪:

Traceback (most recent call last):
File "C:\Users\Marc\Phyton\rafafafaf\src\test.py", line 20, in <module>
C = CustomParser()
File "C:\Users\Marc\Phyton\rafafafaf\src\test.py", line 17, in __init__
super(CustomParser, self).__init__()
TypeError: must be type, not classobj

2 个答案:

答案 0 :(得分:2)

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

class CustomParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)

答案 1 :(得分:1)

试试这个:

class CustomParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)

或者这个:

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

详细说明: https://stackoverflow.com/a/9719731/320104