我正在制作一个带有网格的程序,我需要一个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
答案 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个下划线。