蟒蛇2.7 - 如何调用父类的构造

蟒蛇2.7 - 如何调用父类的构造

问题描述:

我有基类,像下面蟒蛇2.7 - 如何调用父类的构造

class FileUtil: 
    def __init__(self): 
     self.outFileDir = os.path.join(settings.MEDIA_ROOT,'processed') 
     if not os.path.exists(outFileDir): 
      os.makedirs(outFileDir) 
    ## other methods of the class 

,我如下扩展该类:

class Myfile(FileUtil): 
    def __init__(self, extension): 
     super(Myfile, self).__init__() 
     self.extension = 'text' 
    ## other methods of class 

但我得到下面的错误?

super(Myfile, self).__init__() 
TypeError: super() takes at least 1 argument (0 given) 

我经历了许多文件,发现在2.x和3.x中调用super()有不同的sytex。我尝试了两种方式,但得到错误。

+0

的可能的复制[Python中,调用超构造函数(http://stackoverflow.com/questions/2399307/python-invoke-super-constructor) –

+0

我没有看到你的代码 – tinySandy

+0

我任何麻烦我在Django中使用这段代码。虽然我可以理解Django并没有特定的内容,但仍然在问我是否缺少某些东西。 – virus

您有2个选项

老样式类,你应该直接调用超级构造函数。

class FileUtil(): 
    def __init__(self): 
     pass 

class Myfile(FileUtil): 
    def __init__(self, extension): 
     FileUtil.__init__(self) 

新样式类,继承自基类中的对象,并且您正在处理的超级对象将被正确处理。

class FileUtil(object): 
    def __init__(self): 
     pass 

class Myfile(FileUtil): 
    def __init__(self, extension): 
     super(Myfile, self).__init__() 
+0

以及它与OP的代码片段有何不同? – tinySandy

+0

它们与所述不同。第一个不同地调用超级构造函数,第二个继承自'object'。 –

+0

第二个例子是OP使用和有问题。所以这不是OP的问题的答案 – tinySandy

您可能需要使用super()功能以及创建FileUtil类:

class FileUtil(object): 
    def __init__(self): 
     super(FileUtil, self).__init__() 
     ...