2016-07-06 16 views
3

저는 파이썬에 익숙하지 않습니다. 저는 파이썬 3.5를 우분투에서 사용하고 있습니다. 나는이 질문에 대한 연구를했고 나는 많은 답을 발견했다. 내가하고있는 일은 모두가해야 할 말처럼 보이지만 여전히 오류가 발생하고 있습니다.파이썬 3.5 클래스 변수

import csv 
import sys 

Class State(): 
    started = False 

    def waiting(self): 
     self.started 
     if self.started == False: 
      self.started = True 
     return 

    def buy_in(self, col): 
     if self.started == False: 
      return 
     else: 
      print(col) 

def read_file(file): 
    csv_list = csv.reader(file) 
    header = True 

    for row in csv_list: 
     if header: 
      header = False 
      continue 

     col = float(row[5]) 

     if col < 0 : 
      State.waiting() 
     if col >= 0: 
      State.buy_in(col) 
    file.close() 

def main(filename): 
    file = open(filename) 
    read_file(file) 

def __name__ == '__main__': 
    main(sys.argv[1]) 

저는 파이썬에서 클래스와 메소드를 사용하여 의사 FSM을 만들려고합니다. 난 그냥 글로벌 bool을 만들어야합니다. 나는 내가 뭘 잘못하고 있는지 이해하지 못한다. 누군가 나에게 약간의 명확성을 주어도 괜찮다면, 고맙겠습니다. 감사합니다

명확히하기 위해 buy_in 메서드의 if 문에서 NameError가 발생했습니다.

+0

클래스 변수로 사용하려면 메소드 내부에서'started' 앞에'self.'를 추가하십시오. – NendoTaka

+0

전역 변수는 대개 클래스 외부에서 선언됩니다. 'started'는 클래스 변수로 설정됩니다. – NendoTaka

+0

글쎄,이 경우, 나는 클래스 변수를 사용하는 것이 좋다. 나는 변수에 대한 호출을'self.started'로 바꾸었고 여전히 NameError를 수신했습니다. 이름 자체가 정의되지 않았다고 말합니다. – John

답변

2

봅니다 : started 이후

class State(): 

    started = False 

    def waiting(self): 
     if self.started == False: 
      self.started = True 
     return 

    def buy_in(self, col): 
     if self.started == False: 
      return 
     else: 
      print(col) 

당신이 그것을 호출 할 때 self.을 사용할 필요가 클래스 변수입니다. 전역 변수가 아니므로 전역 호출이 필요하지 않습니다. 클래스 내부의 각 메소드에는 인수로 self이 필요합니다.