在python 2.7中扩展类,使用super()

时间:2013-10-11 16:38:46

标签: python inheritance python-2.7

也许这是一个愚蠢的问题,但为什么这段代码在python 2.7中不起作用?

from ConfigParser import ConfigParser

class MyParser(ConfigParser):
    def __init__(self, cpath):
        super(MyParser, self).__init__()
        self.configpath = cpath
        self.read(self.configpath)

失败了:

TypeError: must be type, not classobj

super()行。

2 个答案:

答案 0 :(得分:4)

很可能因为ConfigParser不会从object继承,因此不是new-style class。这就是为什么super无法在那里工作的原因。

检查ConfigParser定义并验证是否是这样的:

class ConfigParser(object): # or inherit from some class who inherit from object

如果没有,那就是问题。

我对您的代码的建议不是使用super。只需在ConfigParser上直接调用self,就像这样:

class MyParser(ConfigParser):
    def __init__(self, cpath):
        ConfigParser.__init__(self)
        self.configpath = cpath
        self.read(self.configpath)

答案 1 :(得分:3)

问题是ConfigParser旧式类。 super不适用于旧式类。相反,使用显式调用__init__

def __init__(self, cpath):
     ConfigParser.__init__(self)
     self.configpath = cpath
     self.read(self.configpath)

有关新旧样式类的说明,请参阅this question,