python 超类初始化参数
python superclass initialization arguments
我遇到了如何为超级 class 初始化编写参数的问题。 class App1
需要从其他两个 class 继承。我在 class App1
处初始化了基 classes 中的所有参数,但错误提示我有太多参数。我想知道为什么?基本上,我将基 classes 中的所有参数都放在 super init 中。 3个class写成多个windows,一个Button
命令class一个接一个跳转。所以我称 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()
错误消息:
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
你的 Welcome
和 question
class 没有写成合作超级classes。如果你想使用 super(..)
,你需要重写他们的 __init__
方法来接受任意数量的参数,并且他们需要再次调用 super(..).__init__
并使用所有尚未使用的参数。
但对于您的情况,显式调用 superclass 初始值设定项可能更容易:
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 初始化编写参数的问题。 class App1
需要从其他两个 class 继承。我在 class App1
处初始化了基 classes 中的所有参数,但错误提示我有太多参数。我想知道为什么?基本上,我将基 classes 中的所有参数都放在 super init 中。 3个class写成多个windows,一个Button
命令class一个接一个跳转。所以我称 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()
错误消息:
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
你的 Welcome
和 question
class 没有写成合作超级classes。如果你想使用 super(..)
,你需要重写他们的 __init__
方法来接受任意数量的参数,并且他们需要再次调用 super(..).__init__
并使用所有尚未使用的参数。
但对于您的情况,显式调用 superclass 初始值设定项可能更容易:
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)
...