Python超类初始化参数



我遇到了有关如何为超级类初始化编写参数的问题。class App1需要从其他两个类中继承。我在class App1上初始化了基本类中的所有参数,但是错误说我的args太多了。我想知道为什么?基本上,我将基础类中的所有参数放在超级初始化中。这三个类写为多个窗口, Button命令类逐一跳跃。因此,我将main()称为myApp = Welcome(root, csv_name_ses, csv_name_sub)

感谢您的帮助!

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()

错误msg:

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

您的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)

您应该这样称呼:

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)
      ...

最新更新