2017-05-30 104 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) 
     ...