Python:类方法调用变量时,对象变量会出现“ NameError”

时间:2019-03-30 01:02:51

标签: python python-3.x

我正在制作一个带有网格的程序,我需要一个2d数组。在Grid对象的构造函数中,我初始化2个变量,一个保存坐标的tuple和一个2d对象数组。 tuple(Named, selected)工作完美。数组(名为gridArray)无法正常工作。

在调用方法selectCell的情况下运行程序时,出现错误 "NameError: name 'gridArray' is not defined"

要测试它,我已将gridArray转换为一个简单的int,程序给出了相同的错误。我也用以下代码称呼它:

Grid.gridArray 这将导致错误,即Grid数组没有名为gridArray

的变量

self.gridArray 该错误实质上表明self未定义。

代码:

class Grid:
    def _init_(self):
        gridArray = 5      #[[cell.Cell() for j in range(9)] for i in range(9)]
        selected = (-1,-1)

    def selectCell(x):
        selected = (int(x[0]/const.CELLSIZE),int(x[1]/const.CELLSIZE))
        print(selected)
        print(gridArray)

print(gridArray)应该只打印5,而只是NameError

2 个答案:

答案 0 :(得分:3)

您需要引用特定实例的gridArray属性。这通常是通过self完成的,并且是区分类变量,实例变量和局部变量所必需的:

class Grid:

    # Class variables are defined here. All instances of the class share references to them.

    def __init__(self):
        # Anything prefixed with "self" is an instance variable. There will be one for each instance of Grid.
        # Anything without is a local variable. There will be one for each time the function is called.
        self.gridArray = 5
        self.selected = (-1, -1)

    def selectCell(self, x):
        self.selected = (int(x[0] / const.CELLSIZE),int(x[1] / const.CELLSIZE))
        print(self.selected)
        print(self.gridArray)

答案 1 :(得分:0)

类中的每个函数都需要解析self变量,以使其在创建类时引用在该类实例中定义的其他变量。现在,gridArray是__init__函数中的局部变量。您可以在https://docs.python.org/3.7/tutorial/classes.html#class-objects

上了解有关课程的更多信息

您应该将gridArray定义为self.gridArray,以便可以在班级的其他地方使用它。确保还解析属于此类的每个函数中的self变量,如下所示:def selectCell(self, x):的通用格式为def <funcname>(self, *args): <code>

此外,__init__函数前后应有2个下划线。