【问题标题】:Python 3.5 class variablesPython 3.5 类变量
【发布时间】:2016-11-07 23:38:27
【问题描述】:

我是 python 新手,我在 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])

我只是想通过使用类和方法在 python 中创建一个伪 FSM。我只需要创建一个全局布尔值。我真的不明白我做错了什么。如果有人不介意给我一些说明,我将不胜感激。谢谢

为了澄清,我在 buy_in 方法的 if 语句中得到 NameError。

【问题讨论】:

  • 如果您想将其用作类变量,请在方法中的 started 前面添加 self.
  • 全局变量通常在类之外声明。 started 设置为类变量。
  • 好吧,在这种情况下,我可以使用类变量。我将对变量的调用更改为self.started,但仍然收到NameError。说自己的名字没有定义。
  • 尝试取出global started
  • 这就是我刚刚做的,我删除了 global 关键字,并将每个实例都更改为 self.started 除了初始声明。我不确定这是否完全正确。我不知道为什么它说 self 没有在 buy_in 方法中定义。

标签: python-3.x class-variables


【解决方案1】:

试试:

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 作为参数。

【讨论】:

    猜你喜欢
    • 2017-11-20
    • 1970-01-01
    • 2022-06-10
    • 2011-03-24
    • 2012-01-31
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多