2016-07-06 2 views
3

Я новичок в python, и я использую python 3.5 на Ubuntu. Я сделал некоторые исследования по этому вопросу, и я нашел много ответов. То, что я делаю, похоже на то, что все говорят, что я должен делать, но я все еще получаю ошибки.Переменные класса 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]) 

Я просто пытаюсь создать псевдо-FSM в python, используя класс и методы. Мне просто нужно создать глобальный bool. Я не совсем понимаю, что я делаю неправильно. Если кто-то не возражает, давая мне некоторую ясность, я был бы признателен. Спасибо

Чтобы уточнить, я получаю NameError в выражении if в методе buy_in.

+0

Если вы хотите использовать его как переменную класса, добавьте 'self.' перед' запуском' внутри ваших методов. – NendoTaka

+0

Глобальная переменная обычно объявляется вне класса. 'start' устанавливается как переменная класса. – NendoTaka

+0

Ну, в этом случае, я в порядке с переменной класса. Я изменил вызов на переменную на 'self.started', и я все равно получил NameError. Говорит само имя не определено. – John

ответ

2

Try:

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 в качестве аргумента.

Смежные вопросы