也许这是一个愚蠢的问题,但为什么这段代码在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()
行。
答案 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,。