2017-02-14 4 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') 

프로그램

오류없이 실행할 수 있습니다,하지만 난이 두 클래스에서 그들을 인쇄 할 때 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()'의 결과는 빈 문자열을 반환합니다. –