2017-02-14 8 views
-2

の変数をメソッドでclass Bに使用しようとしています。しかし、どういうわけかclass AとBの変数が表示されませんでした(私のCVSファイルに変更はありません)。ここに私のコードは次のとおりです。クラスBのクラスAの変数をA .__ init __()メソッドを使用して使用する

class Welcome(object): 

    csv_name_sub = None 
    csv_name_ses = None 

    def __init__(self, master, csv_name_sub = None, csv_name_ses = None): 
     self.entrySub=Entry(self.master,bg="grey") 
     self.entrySes=Entry(self.master,bg="grey") 

     self.csv_name_sub = str(self.entrySub.get()) 
     self.csv_name_ses = str(self.entrySes.get()) 

    def writeToFile(self): 
     with open("/Users/Desktop/" + self.csv_name_sub+ '_' + self.csv_name_ses + '_subjectNo.csv', 
       'w') as resultFile: 
     resultFileWrite=.... 

class App(Welcome): 

    def __init__(self, master): 
     Welcome.__init__(self, master) #I'm using python 3.5 

     Welcome.csv_name_sub = str(self.entrySub.get()) 
     Welcome.csv_name_ses = str(self.entrySes.get()) 

     print('session is', Welcome.csv_name_ses) 
     print("subject is", Welcome.csv_name_sub) 

     self.resultFile = open("/Users/Desktop/" + Welcome.csv_name_sub + '_' + Welcome.csv_name_ses + '_results.csv', 'w') 

プログラムがエラーなしで実行することができますが、私はこの2つのクラスでそれらを印刷するときcsv_name_subcsv_name_sesは空です。

+1

In P ython、空白の問題。メソッドの書式設定/タブ移動を確認できますか? –

+0

あなたのアラームロケットのためのThans、ちょうどそれを変更! – key

答えて

2

更新された属性は、スーパークラスではなくインスタンスにバインドされています。あなたはselfを使用してインスタンスを経由して属性を参照する必要があります

class App(Welcome): 

    def __init__(self, master): 
     Welcome.__init__(self, master) # Updated attributes are bound to self 

     self.csv_name_sub = str(self.entrySub.get()) 
     self.csv_name_ses = str(self.entrySes.get()) 
     ... 
1

、すなわちselfから、インスタンスの属性を使用します。

class App(Welcome): 

    def __init__(self, master): 
     super().__init__(master) #I'm using python 3. 

     print('session is', self.csv_name_ses) 
     print("subject is", self.csv_name_sub) 

の作業例:

class Entry(object): 

    def __init__(self, master, bg): 
     pass 

    def get(self): 
     return 42 


class Welcome(object): 

    def __init__(self, master): 
     self.master = master 
     self.entrySub = Entry(self.master, bg="grey") 
     self.entrySes = Entry(self.master, bg="grey") 

     self.csv_name_sub = str(self.entrySub.get()) 
     self.csv_name_ses = str(self.entrySes.get()) 

class App(Welcome): 

    def __init__(self, master): 
     super().__init__(master) 

     print('session is', self.csv_name_ses) 
     print("subject is", self.csv_name_sub) 


app = App('x') 

出力:

session is 42 
subject is 42 
+0

ありがとう! Entry(クラスWelcome)はtkinterエントリウィジェットです。ここに入力されたものは、Appクラスで印刷されます。 'str(self.entrySub.get())'はユーザーの入力を取得します。私はあなたのコードを私のものに組み込もうとしました。しかし 'self.csv_name_ses'はまだ印刷できません。このプログラムもエラーなく正常に動作します。理由は何ですか?心から感謝する! – key

+0

おそらく 'self.entrySub.get()'の結果は空の文字列を返します。 –

関連する問題