2017-05-30 7 views
0

スーパークラス初期化の引数の書き方に問題があります。 class App1は、2つの他のクラスから継承する必要があります。ベースクラスのすべての引数をclass App1に初期化しましたが、エラーが出ると、あまりにも多くの引数があると言います。なぜだろう?基本的には、基本クラスからのすべての引数をスーパー初期化に入れます。 3つのクラスは複数のウィンドウとして記述され、Buttonはクラスが1つずつジャンプするように指示します。だから私は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) 
     ... 
関連する問題