python超类初始化参数

python超类初始化参数,python,initialization,arguments,superclass,Python,Initialization,Arguments,Superclass,我遇到了一个关于如何为超类初始化编写参数的问题。类App1需要从另外两个类继承。我在类App1初始化了基类中的所有参数,但是错误表明我有太多的参数。我想知道为什么?基本上,我把所有来自基类的参数都放在超级init中。这3个类被写成多个窗口,一个按钮命令类一个接一个地跳转。因此,我将main()称为myApp=Welcome(root,csv\u name\u ses,csv\u name\u sub) 谢谢你的帮助 class question(object): #first window

我遇到了一个关于如何为超类初始化编写参数的问题。
类App1
需要从另外两个类继承。我在
类App1
初始化了基类中的所有参数,但是错误表明我有太多的参数。我想知道为什么?基本上,我把所有来自基类的参数都放在超级init中。这3个类被写成多个窗口,一个
按钮
命令类一个接一个地跳转。因此,我将
main()
称为
myApp=Welcome(root,csv\u name\u ses,csv\u name\u 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()
错误消息:

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

您的
欢迎
问题
类不是作为协作超类编写的。如果您想使用
super(..)
,您需要重写他们的
\uuuuu init\uuuuu
方法以接受任意数量的参数,并且他们需要再次调用
super(..)。\uuuu init\uuuu
,使用所有尚未使用的参数

但对于您的情况,只显式地调用超类初始值设定项可能更容易:

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)

您的
欢迎
问题
类不是作为协作超类编写的。如果您想使用
super(..)
,您需要重写他们的
\uuuuu init\uuuuu
方法以接受任意数量的参数,并且他们需要再次调用
super(..)。\uuuu init\uuuu
,使用所有尚未使用的参数

但对于您的情况,只显式地调用超类初始值设定项可能更容易:

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

你应该这样称呼:

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