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