2016-07-06 75 views
3

我是python新手,我在Ubuntu上使用python 3.5。我對這個問題做了一些研究,並且發現了很多答案。我在做什麼看起來像每個人都在說我應該這樣做,但我仍然收到錯誤。Python 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]) 

我只是想在Python中創建一個僞FSM,通過使用一個類和方法。我只需要創建一個全局布爾。我真的不明白我做錯了什麼。如果有人不介意給我一些澄清,我會很感激。謝謝

爲了說明問題,我在buy_in方法的if語句中得到NameError。

+0

如果您想將其用作類變量,請在方法內的'started'前添加'self.'。 – NendoTaka

+0

全局變量通常在類的外部聲明。 'started'被設置爲一個類變量。 – NendoTaka

+0

那麼,在這個例子中,我對類變量很好。我將該變量的調用改爲'self.started',並且我仍然收到一個NameError。名字自我沒有定義。 – John

回答

2

嘗試:

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) 

由於started是你需要調用它時使用self.類變量。它不是全局變量,所以你不需要全局調用。該類中的每個方法也需要self作爲參數。