2016-02-05 164 views
0

我有基類,像下面蟒蛇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

回答

3

您有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

0

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

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