2017-05-30 83 views
0

我遇到了如何爲超類初始化寫參數的問題。 class App1需要從兩個其他類繼承。我初始化了基類的所有參數class App1,但錯誤表明我的參數過多。我想知道爲什麼?基本上,我把基類中的所有參數放在超級初始化中。這三個類被寫成多個窗口,並且一個接一個地跳轉到一個Button命令。所以我把main()稱爲myApp = Welcome(root, csv_name_ses, csv_name_sub)python超類的初始化參數

感謝您的幫助!

class question(object): #first window 
    def __init__(self, algorithmIndex, initX, mid_loss_list = None, mid_gain_list = None): 
      self.initX = initX 
      self.algorithmIndex = algorithmIndex 
      self.mid_gain_list = question.mid_gain_list 
      self.mid_loss_list = question.mid_loss_list 
      ... 

class Welcome(object): #second window 
     def __init__(self, master, csv_name_ses, csv_name_sub): 
      self.master = master 
      Welcome.csv_name_sub = str(self.entrySub.get()) 
      Welcome.csv_name_ses = str(self.entrySes.get()) 
      ... 

class App1(Welcome, question): #third, last one appears 
     def __init__(self, master, csv_name_ses, csv_name_sub, algorithmIndex, initX, mid_loss_list, mid_gain_list): 
      super(App1, self).__init__(master, csv_name_ses, csv_name_sub, algorithmIndex, initX, mid_loss_list, mid_gain_list) 
      ...  

def main(): 

    root = Tk() 
    myApp = Welcome(root, csv_name_ses, csv_name_sub) 
    root.mainloop() 

錯誤消息:

super(App1, self).__init__(master, csv_name_ses, csv_name_sub, algorithmIndex, initX, mid_loss_list, mid_gain_list) 
TypeError: __init__() takes 4 positional arguments but 8 were given 

回答

1

Welcomequestion類沒有寫​​成合作超。如果你想使用super(..),你需要重寫他們的__init__方法來接受任意數量的參數,並且他們需要再次調用super(..).__init__所有尚未消耗的參數。

但對你的情況很可能更容易只顯式調用父類的初始化:

class Appl(Welcome, question): 
    def __init__(self, master, csv_name_ses, csv_name_sub, algorithmIndex, initX, mid_loss_list, mid_gain_list): 
     Welcome.__init__(self, master, csv_name_ses, csv_name_sub) 
     question.__init__(self, algorithmIndex, initX, mid_loss_list, mid_gain_list) 
1

你應該叫這樣的:

class App1(Welcome, question): #third, last one appears 
    def __init__(self, master, csv_name_ses, csv_name_sub): 
     Welcome.__init__(master, csv_name_ses, csv_name_sub, algorithmIndex, initX, mid_loss_list, mid_gain_list) 
     question.__init__(algorithmIndex, initX, mid_loss_list, mid_gain_list) 
     ...