2016-07-06 76 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作为参数。