Grid类方法调用gridArray变量触发NameError问题求助
问题排查与修复方案
我来帮你搞定这个NameError问题,你的代码里有几个关键的小疏漏,咱们一步步理清楚:
1. 构造方法的名字写错了
Python类的构造方法必须是__init__(前后各两个下划线),你写的是_init_(前后各一个下划线)——这意味着这个方法根本不会被Python当作构造方法执行,里面的变量自然也不会被初始化。
2. 没有用self绑定实例属性
就算构造方法写对了,你直接写gridArray = 5只是在构造方法的局部作用域里创建了临时变量,并没有把它变成Grid实例的属性。必须用self.前缀来绑定,比如self.gridArray = 5,这样这个变量才属于每个Grid实例。
3. 实例方法缺少self参数
selectCell是类的实例方法,第一个参数必须是self(这是Python的约定,用来指代当前实例对象)。没有self的话,方法不仅无法访问实例的属性,调用时还会因为参数不匹配报错。
修复后的完整代码
class Grid: def __init__(self): self.gridArray = 5 # [[cell.Cell() for j in range(9)] for i in range(9)] 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)
修复后的效果说明
现在当你创建Grid实例并调用selectCell方法时:
- 构造方法
__init__会正确执行,给实例绑定gridArray和selected属性 selectCell通过self可以访问到实例的gridArray,执行print(self.gridArray)会输出预期的5- 同时
selected也改成了实例属性,后续其他方法也能正常访问它
内容的提问来源于stack exchange,提问作者Lorale
相关产品推荐
相关产品推荐

